Переименование файлов с помощью текстового файла [закрыт]

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

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

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.

27
задан slhck
21.01.2023 8:40 Количество просмотров материала 2554
Распечатать страницу

3 ответа

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

вы должны:

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

  2. пресс C-x d для навигации в нужном каталоге;

  3. пресс C-x C-q для запуска редактора;

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

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


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

2
отвечен cYrus 2023-01-22 16:28

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

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

alias qqmv="qmv -fdo"

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

1
отвечен Heptite 2023-01-22 18:45

Допустим, у вас два файла,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 … просто напечатать команду вместо ее выполнения.

0
отвечен slhck 2023-01-22 21:02

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх