Решение snowliondev указало мне правильное место. Он работает с файлами jpg с использованием устаревшего тега ключевых слов IPTC :, но следующая команда будет применяться к файлам jpg, png и другим файлам с тегами XMP:
exiftool −r −overwrite_original -TagsFromFile @ '-XMP:Subject>Description' *
См. эту ветку , в которой также показано, как включить путь к каталогу в метаданные описания, что полезно для Google Фото, не сохраняющих иерархии папок.
Как сценарий оболочки:
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")
добавляет новый суффикс с нулевым префиксом -к имени целевого файла.
Если у вас есть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