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


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

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

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.


0
2018-02-22 16:53


Источник


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


Ответы:


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

Вы должны:

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

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

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

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

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


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


2
2018-02-23 20:08





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

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

alias qqmv="qmv -fdo"

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


1
2018-02-23 20:19



У OP уже есть текстовый файл, я думаю, что они просто запутались в том, как обрабатывать оболочки globs. - slhck


Скажем, у вас есть два файла, 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
2018-02-23 18:39



Я не изменяю текстовые файлы, я меняю имена .avi видеофайлов с использованием новых имен файлов, которые находятся в текстовом файле. - user302394
Да, поэтому вы указываете старые имена файлов в текстовом файле и новые имена файлов в текстовом файле. Как еще вы узнаете, какой файл переименовать? Или у вас есть какой-то контекст, где он однозначен, а имена целевых файлов указаны в алфавитном порядке входных файлов? - slhck
В Kubuntu, используя средство просмотра файлов Dolphin, вы можете нажать F4, и он откроет небольшое окно терминала внизу. Он выполняет любую команду, которую вы вводите в каталоге / папке, в которой вы находитесь. Например, mv * .avi ~ / To_Rename Вам не нужно указывать, куда вы перемещаете файлы. - user302394
Конечно. Но эта команда перемещает все файлы в папку, называемую ~/To_Rename если он существует. Если вы хотите указать только имена целевых файлов для ряда существующих файлов, как вы собираетесь убедиться, что dfhjkg.avi заканчивается как File_01_01.avi, wyrtrr.avi в виде File_01_02.avi, и т.д? Вы должны указывать это отношение где-то, следовательно, необходимость в входном файле со списком имен файлов для переименования из, Ваши входные AVI-файлы даже не сортируются в алфавитном порядке ... - slhck
Это что-то вроде этого; для f в файле NewFileNames.txt; do mv * .avi f; Я знаю, что бит «do mv * .avi f» ошибочен, вот где я спотыкаюсь. - user302394