Переименование файлов на основе имен каталогов

Как я могу переименовать .jpg файлы в несколько папок в зависимости от имени папки? Я также хочу, чтобы файлы .jpg оставались в соответствующих папках и не перемещались. В именах папок нет пробелов.

Например, если имя папки имеет значение «Красный», я хочу, чтобы имена файлов были следующими:

 Red000001.jpg Red000002.jpg Red000003.jpg 

У меня есть следующая команда, но она дает нежелательные результаты, перемещая переименованные файлы за пределы их соответствующих папок и делая имена файлов «sloppy»:

 start=$PWD; for directory in *; do cd "$directory"; for filename in *; do mv "$filename" ../"Folder $directory - $filename"; done; cd "$start"; done 

One Solution collect form web for “Переименование файлов на основе имен каталогов”

Если вам нужно входить и выходить из нескольких каталогов, тогда имеет смысл использовать cd - вместо этого вы перейдете в последний текущий рабочий каталог. Или вы используете pushd / popdbash ).

 for directory in *; do pushd "$directory" index=1 for filename in *; do extension="${filename##*.}" if [ "$filename" != "$extension" ]; then extension=".$extension" else # ie there is no dot in the file name extension="" fi target_filename="${directory}$(printf "%06d" "$index")${extension}" if [ -f "$target_filename" ]; then echo "File ${target_filename} exists; aborting." exit 3 fi mv "$filename" "${target_filename}" ((index++)) done popd done 

Этот код не обрабатывает коллизии имен (если он уже есть файл Red00004 ). Он просто проверяет и прерывает.

  • Исключение отдельных строк от перенаправления
  • Команда Bash в строке выполняется, когда я создаю строку, а не когда я использую ее позже
  • Сценарий оболочки, чтобы стать root
  • Проблема использования пользовательской переменной в скрипте
  • Как сравнить число с плавающей запятой в сценарии оболочки
  • Использование переменных bash в команде perl в сценарии bash
  • IFS null - это не то же самое, что unset IFS?
  • Что происходит в этой функции?
  • Простой сценарий bash для резервного копирования и удаления каталогов
  • Выберите содержимое, соответствующее определенному контенту из файла, и переместите его в выходной файл
  • Как объединить все файлы в заданном каталоге по дате, где я хочу, чтобы самый новый файл был сверху?
  • Linux и Unix - лучшая ОС в мире.