2016-08-24 3 views
3

У меня есть куча файлов в одном каталоге с такими именами, как:Bash пакетного переименования файлов в порядке

IMG_20160824_132614.jpg

IMG_20160824_132658.jpg

IMG_20160824_132738.jpg

В средней части дата и последний раздел - время, когда фотография была сделана. Так что, если бы я отсортировать эти файлы по их имени результат будет таким же, как сортировка по дате/времени модифицирована

Я хотел бы пакетного переименования этих файлов с помощью Баш к чему-то вида:

1-x-3.jpg

Где x представляет место файла в последовательном упорядочении (упорядоченный по названию/время модифицированного)

Таким образом, 3 примера выше будет переименован в:

1-1-3.jpg

1-2-3.jpg

1-3-3.jpg

Есть ли команда Баш, который может достичь этого? Или нужен сценарий?

+0

«Где х представляет место файла» - где? –

ответ

4

Try:

i=1; for f in *.jpg; do mv "$f" "1-$((i++))-3.jpg"; done 

Например, используя ваши имена файлов:

$ ls 
IMG_20160824_132614.jpg IMG_20160824_132658.jpg IMG_20160824_132738.jpg 
$ i=1; for f in *.jpg; do mv "$f" "1-$((i++))-3.jpg"; done 
$ ls 
1-1-3.jpg 1-2-3.jpg 1-3-3.jpg 

Примечания:

  1. При расширении *.jpg, оболочка выводит список файлов в алфавитном порядке. Кажется, это то, что вы хотите. Обратите внимание, однако, что буквенно-цифровой порядок может зависеть от языка.

  2. Последовательная нумерация выполняется с помощью $((i++)). Здесь $((...)) представляет собой арифметическое расширение. ++ просто означает приращение переменной на 1.