Мне нужно скопировать имена файлов из одной папки в другую. Содержимое файла никогда не изменяется. Файлы не перезаписываются, не перемещаются и не копируются. Это только о именах файлов.

У меня есть папка с файлами с именем:

  • Шоу - S01E01 - Описательное название.mkv
  • Шоу - S01E02 - Еще один описательный заголовок?.Mkv
  • Шоу - S01E03 - Еще одно сложное имя! .Mkv
  • ...

У меня есть папка B с файлами с именем:

  • show.s01e01.mkv
  • show.s01e02.mkv
  • show.s01e03.mkv
  • ...

Мне больше не нужны файлы в папке A, потому что файлы в папке B имеют лучшее качество. Но я не хочу вручную переименовывать все файлы в папке B, чтобы иметь правильное имя файла, включая заголовок эпизода. Я хотел бы автоматически перенести правильные имена файлов из файлов в папке A в файлы в папке B. Алфавитный порядок в обеих папках одинаков. Таким образом, n-й файл в папке B соответствует n-му файлу в папке A. В конечном итоге папка B будет содержать точно такие же имена файлов, что и в папке A, но, разумеется, содержимое файлов отличается.

Пример:

До:

Папка А:

  • Шоу - S01E01 - Green Apples.mkv
  • Шоу - S01E02 - Персики в небесах.mkv

Папка Б:

  • show.s01e01.mkv
  • show.s01e02.mkv

После:

Папка А:

  • Шоу - S01E01 - Green Apples.mkv
  • Шоу - S01E02 - Персики в небесах.mkv

Папка Б:

  • Шоу - S01E01 - Green Apples.mkv
  • Шоу - S01E02 - Персики в небесах.mkv

Как мне это сделать в Bash? (Или любой другой инструмент GNU/Linux, KDE тоже хорошо)

2 ответа2

0

Чтобы сделать то, что вы хотите, потребуется несколько сценариев. Не слишком вовлечен, но он немного изобретает колесо.

Я хотел бы предложить установить tvnamer https://github.com/dbr/tvnamer

Это будет использовать базу данных, чтобы последовательно переименовать все ваши медиа. Если вы запустите это во всем, то и шоу низкого, и высокого качества будут иметь одинаковые названия, так что вы можете просто скопировать высококачественные шоу на низкокачественные с помощью cp .

0

Вы можете попробовать массивы bash. Я даю скелетное решение ниже.

cd $DIR1
list1=( * )

cd $DIR2
i=0
for f in *
do
  mv $f ${list1[$i]}
  (( i += 1 ))
done

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

list1 - это массив с именами файлов в этом каталоге. $ {list1 [0]} является первым элементом в массиве и т. д. Я не уверен, будет ли это работать с именами файлов с пробелами и т. д.

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