У меня есть тысяча avi, и jpg смешал файлы, которые назвали так
01 09 52 PM 27-03-2019-A.avi
01 09 52 PM 27-03-2019-A.jpg
01 09 55 PM 26-03-2019-A.avi
01 09 55 PM 26-03-2019-A.jpg
Я хочу поместить дату сначала как так
27-03-2019-A 01 09 52 PM.avi
Как я могу сделать это?
С file-rename
от rename
пакет:
file-rename -n 's/(.*PM) (.*-A)/$2 $1/' *
Это печатает изменения сначала, удалите -n
отметьте для фактического выполнения действия. s
выражение замены получает первую строку, заканчивающуюся в “PM” и следующее окончание в “-A” (без пространства между ними) в двух группах, и заменяет их собой в обратном порядке и пространством между ними. Отметьте это *
берет каждый файл в текущем каталоге, измените его, если Вы хотите соответствовать подмножеству, например. *-A.*
для каждого файла, имя которого содержит “-A”..
Если Вы не хотите устанавливать что-нибудь, с чем можно сделать переименование bash
и mv
:
for i in *; do
echo mv -i "$i" "${i:12:12} ${i:0:11}.${i/*.}"
done
Это циклично выполняется по файлам, печатающим mv
команды для переименования, удалите echo
на самом деле переименовать файлы. Это использует bash
Расширение параметра для получения соответствующих строк от входного имени файла.
Обратите внимание, что я имею rename
связанный с file-rename
использование системы альтернатив.
$ touch "01 09 52 PM 27-03-2019-A.avi"
$ rename -n 's/(.*PM) (.*-A)/$2 $1/' *
rename(01 09 52 PM 27-03-2019-A.avi, 27-03-2019-A 01 09 52 PM.avi)
$ rename 's/(.*PM) (.*-A)/$2 $1/' *
$ ls
27-03-2019-A 01 09 52 PM.avi
$ rm 27-03-2019-A\ 01\ 09\ 52\ PM.avi
$ touch "01 09 52 PM 27-03-2019-A.avi"
$ for i in *;do echo mv "$i" "${i:12:12} ${i:0:11}.${i/*.}";done
mv 01 09 52 PM 27-03-2019-A.avi 27-03-2019-A 01 09 52 PM.avi
$ for i in *;do mv "$i" "${i:12:12} ${i:0:11}.${i/*.}";done
$ ls
27-03-2019-A 01 09 52 PM.avi