Я пытаюсь переименовать загрузку файлов, но не знаю, как включить использование текстового файла с новыми именами в нем.

У меня есть несколько видеофайлов, которые я хочу переименовать, используя новый список в текстовом файле. например

dfhjkg.avi
wyrtrr.avi
jtylktmn.avi
ertjnn.avi

Для переименования новыми именами файлов в другом текстовом файле:

File_01_01.avi
File_01_02.avi
File_01_03.avi
File_01_04.avi 

Я использую Kubuntu 12.04.

3 ответа3

2

Emacs поставляется с хорошей функцией, называемой dired, которая позволяет вам перечислять файлы в определенном каталоге, редактировать их и затем фиксировать изменения на диске.

Ты должен:

  1. запустить Emacs;

  2. нажмите C-x d чтобы перейти в нужный каталог;

  3. нажмите C-x C-q чтобы включить редактор;

  4. редактируйте имена файлов, используя все функции, которые вам нравятся: поиск / замена, редактирование в режиме столбцов и т. д .;

  5. когда вы закончите, нажмите C-c C-c чтобы сохранить изменения.


В качестве альтернативы вы можете дать Massren попробовать (я не сделал), он должен быть своего рода автономный dired

1

Я использовал renameutils, в частности команду " qmv ", которая входит в этот пакет, именно для такого рода вещей уже много лет.

По умолчанию « qmv » показывает каждое имя файла дважды в каждой строке, и вам нужно только изменить второе вхождение имени файла. Это так, что вы всегда можете увидеть оригинальное имя файла. Однако, это может быть проблематично с длинными именами файлов, которые вызывают перенос строк в редакторе, поэтому у меня есть этот псевдоним:

alias qqmv="qmv -fdo"

Опция " -f " изменяет формат, используемый qmv в текстовых файлах, а " do " - это спецификация формата, которая в основном говорит ему только один раз перечислять имена файлов.

0

Допустим, у вас есть два файла, old.txt и new.txt , каждый из которых содержит строку для каждого файла, который необходимо переименовать. Тогда вы можете просто позвонить:

paste old.txt new.txt | while IFS=$'\t' read -r old new; do 
  mv -i -- "$old" "$new"
done

Это будет работать только в том случае, если имена файлов не содержат новых строк или вкладок. Итак, вы создаете файл с именем old.txt с помощью:

dfhjkg.avi
wyrtrr.avi
jtylktmn.avi
ertjnn.avi

И new.txt с:

File_01_01.avi
File_01_02.avi
File_01_03.avi
File_01_04.avi 

Затем запустите скрипт выше. В вашем случае это будет называть:

mv -- dfhjkg.avi File_01_01.avi
mv -- wyrtrr.avi File_01_02.avi
mv -- jtylktmn.avi File_01_03.avi
mv -- ertjnn.avi File_01_04.avi

… Но mv все равно попросит у вас подтверждения, если есть файлы, которые будут перезаписаны. Используйте echo mv … чтобы просто напечатать команду вместо ее выполнения.

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