Как заменить столбец чисел во многих именах файлов

Решение snowliondev указало мне правильное место. Он работает с файлами jpg с использованием устаревшего тега ключевых слов IPTC :, но следующая команда будет применяться к файлам jpg, png и другим файлам с тегами XMP:

exiftool −r −overwrite_original -TagsFromFile @ '-XMP:Subject>Description' *

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

3
21.09.2019, 10:51
2 ответа

Как сценарий оболочки:

tempdir="$(mktemp -d)"
i=0; for file in *.mp3; do
  i=$((i+1))
  mv -- "$file" "$tempdir/${file%%[0-9]*.mp3}$(printf '%06d.mp3' "$i")"
done
mv "$tempdir"/*. && rmdir "$tempdir"

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

При циклическом переборе имен файлов ${file%%[0-9]*.mp3}удаляет существующий суффикс nnnnnn.mp3из имени файла и $(printf '%06d.mp3' "$i")добавляет новый суффикс с нулевым префиксом -к имени целевого файла.

3
27.01.2020, 21:12

Если у вас естьperl-rename(с именем renameв системах на основе Debian, включая Ubuntu ), вы можете сделать:

rename -n 's/\d+.mp3$/sprintf("%06d",$c++). ".mp3"/e' *mp3

Пояснение

  • -nзаставляет renameпечатать только то, что он должен делать, ничего не переименовывая. Удалите его, как только вы убедитесь, что команда делает то, что вы хотите.
  • s/foo/bar/e:это оператор подстановки; он заменит fooна bar. eв конце приводит к тому, что любые команды в правой части оператора оцениваются и заменяются их выводом.
  • \d+.mp3$:соответствует самой длинной части чисел, которые заканчиваются на .mp3, а затем на конец имени файла ($).
  • sprintf("%06d",++$c). ".mp3":Команда sprintfнапечатает содержимое переменной $cпосле добавления к ней 1 с 6 ведущими нулями. Поскольку $cне инициализируется при первом запуске команды, ++$cстанет равным 1. Затем это объединяется с .mp3.

Конечным результатом всего этого будет замена отрезка чисел перед расширением увеличивающимся, 0 -дополненным числом:

$ rename -n 's/\d+.mp3$/sprintf("%06d",++$c). ".mp3"/e' *mp3
cc cc nn - ccccccc ccc cccccccc - 123401.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000001.mp3
cc cc nn - ccccccc ccc cccccccc - 123402.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000002.mp3
cc cc nn - ccccccc ccc cccccccc - 123403.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000003.mp3
cc cc nn - ccccccc ccc cccccccc - 123404.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000004.mp3
cc cc nn - ccccccc ccc cccccccc - 123405.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000005.mp3
cc cc nn - ccccccc ccc cccccccc - 123406.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000006.mp3
cc cc nn - ccccccc ccc cccccccc - 123407.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000007.mp3
cc cc nn - ccccccc ccc cccccccc - 123408.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000008.mp3
cc cc nn - ccccccc ccc cccccccc - 123409.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000009.mp3
cc cc nn - ccccccc ccc cccccccc - 123410.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000010.mp3
cc cc nn - ccccccc ccc cccccccc - 123411.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000011.mp3
cc cc nn - ccccccc ccc cccccccc - 123412.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000012.mp3
cc cc nn - ccccccc ccc cccccccc - 123413.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000013.mp3
cc cc nn - ccccccc ccc cccccccc - 123414.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000014.mp3
cc cc nn - ccccccc ccc cccccccc - 123415.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000015.mp3
cc cc nn - ccccccc ccc cccccccc - 123416.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000016.mp3
cc cc nn - ccccccc ccc cccccccc - 123417.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000017.mp3
cc cc nn - ccccccc ccc cccccccc - 123418.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000018.mp3
cc cc nn - ccccccc ccc cccccccc - 123419.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000019.mp3
cc cc nn - ccccccc ccc cccccccc - 123420.mp3 -> cc cc nn - ccccccc ccc cccccccc - 000020.mp3
4
27.01.2020, 21:12

Теги

Похожие вопросы