Предположим, у меня есть папка с примерно 20 файлами (скажем, фотографиями, которые я сделал во время поездки), и я хочу переименовать их за один раз, только нет никакого конкретного выражения Perl, которое я хочу использовать (например если бы я хотел добавить дополнительный текст к каждому имени, которое не является частью метаданных отдельных файлов, таких как описания и / или комментарии).
И, предположим, мне легче сгенерировать текстовый файл с тем, что я хочу, чтобы имя каждого файла было (или, если предпочтительнее, списком «до и после»)
.Есть ли способ применить изменения, подразумеваемые в этом текстовом списке, к рассматриваемой папке?
Поместите файл списка file.list с новыми именами в последовательном порядке с расширением как file.list в папку с файлами, которые нужно переименовать, например,
newname file x.jpg
newname file y.jpg
newname file z.jpg
Измените каталог на рабочий каталог.
изменить расширение в коде , все файлы с этим расширением будут переименованы в последовательном порядке согласно списку.
Файл undo_rename.sh будет создан в домашней папке, чтобы отменить при необходимости.
rm ~/undo_rename.sh; count=1; for name in *.ext; do echo "mv" '"'`awk "NR==$count{print;exit}" file.list`'"' '"'$name'"' >> ~/undo_rename.sh; chmod +x ~/undo_rename.sh; mv "$name" "`awk "NR==$count{print;exit}" file.list`"; ((count+=1)); done
Это похоже на работу для xargs
.
Если ваш файл отформатирован так:
old_file1 new_file1
old_file2 new_file2
, тогда вы можете сделать xargs -a your_file -n 2 mv
.