пакетное переименование файлов на дату - PullRequest
1 голос
/ 11 марта 2012

Я создал 140000 кадров, чтобы создать из них фильм. Тем не менее, он начинается с 1.png, где было бы лучше, если бы он начался с 000001.png, чтобы сохранить порядок при импорте его в окончательный вариант экспресса.

Раньше у меня было имя программы, но она была основана на power-pc, поэтому она больше не работает. Кроме того, программа была довольно дерьмовой, даже с партией из 300 файлов, например, поэтому я думаю, что для этого лучше использовать терминал.

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

Может ли кто-нибудь помочь мне с правильным сценарием терминала? Мне нужно закончить этот проект как можно скорее, иначе я бы сделал его заново, но это займет 15 часов.

Ответы [ 3 ]

2 голосов
/ 11 марта 2012

Не очень эффективно, но поскольку вам нужно запустить его только один раз:

for i in `seq 1 140000`; do
  mv $i.png `printf %06d $i`.png
done

РЕДАКТИРОВАТЬ: Я предположил (возможно, неправильно), что вы использовали Linux.Это не будет работать в Windows.

РЕДАКТИРОВАТЬ: Да, это должно работать в Mac OS X. Вместо ввода этих строк в командной строке, вы можете сохранить его в файл.Обычно вы сохраняете такой файл с именем, например rename.sh.Затем вы можете запустить его на терминале следующим образом:

sh rename.sh

Если вы не уверены, вы можете изменить строку mv на:

echo mv $i.png `printf %06d $i`.png

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

Если количество файлов отличается, просто замените 140000 на номер последнего файла.

1 голос
/ 11 марта 2012

Если вы используете Windows

@echo off
setlocal enableDelayedExpansion
for %%F in (*.png) do (
  set "name=00000%%~nF"
  ren "%%F" "!name:~-6!.png"
)
1 голос
/ 11 марта 2012
for i in *.png
do
    name=${i%.png}
    [[ $name =~ ^[0-9]+$ ]] && mv $i "$(printf '%06d' $name).png"
done
...