3

Я использовал этот скрипт bash:

for i in $(ls); do mv $i a$i; done

добавить все имена файлов в папке с буквой а. Я боюсь, что в какой-то момент я случайно буду использовать этот скрипт в неправильном каталоге и добавлю тонну имен файлов, которые я не хочу добавлять в начало. Поэтому я решил явно указать путь к файлу. Так что теперь мой сценарий выглядит так:

for i in $(ls /cygdrive/c/Users/path/to/Images); do mv /cygdrive/c/Users/path/to/Images/$i /cygdrive/c/Users/path/to/Images/a$i; done

Он добавляет к имени файла букву a, но также добавляет имя файла с этим символом .

Есть идеи, почему он это сделал?

Если это поможет, я использую Cygwin на Windows 7.

Спасибо за помощь!

3 ответа3

3

Никогда не анализируйте вывод 'ls'. Сделайте это вместо этого:

for i in *; do mv "$i" "a${i}"; done

Причина в том, что имена файлов могут содержать такие символы, как \r или \n, и синтаксический анализ 'ls' НЕ найдет их.

Обновление: полезная информация по этой ссылке: http://mywiki.wooledge.org/ParsingLs

С вышеупомянутой добавленной информацией от OP используйте это:

for i in /cygdrive/c/Users/path/to/Images/*; do mv "$i" "${i%/*}/a${i##*/}"; done

ЭТО СДЕЛАЕТ ОДНА ОТНОСИТЕЛЬНО ПЛОХАЯ вещь ... она будет переименовывать ВСЕ файлы при каждом запуске. Это означает, что файл 'foo' будет 'afoo'. Когда вы запустите его снова, это будет «aafoo», затем «aaafoo» и т.д. Вы можете программировать это, избегая любых файлов, начинающихся с «а», но это позволит избежать ВСЕХ файлов, начинающихся с «а», даже если они еще не были переименованы в сценарии.

1

проверьте правильность каталога или переместитесь в правильный каталог (или оба):

отсюда

E_WRONG_DIRECTORY=73

TargetDirectory=/cygdrive/c/Users/path/to/Images

cd $TargetDirectory
echo "Changing names in $TargetDirectory."

if [ "$PWD" != "$TargetDirectory" ]
then    # Keep from wiping out wrong directory by accident.
  echo "Wrong directory!"
  echo "In $PWD, rather than $TargetDirectory!"
  echo "Bailing out!"
  exit $E_WRONG_DIRECTORY
fi  
-2

Пожалуйста, объявите ls /cygdrive/c/Users/path/to/Images как переменную. Пожалуйста, используйте переменную как ${i} вместо $i . Также используйте " " для пути.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .