Переименуйте кучу файлов в debian
Вопрос
У меня есть тысячи файлов, которые мне нужно переименовать в следующем формате.2008:09:18:17:45:48- alfanumeric-alfanumeric.wav первая часть - это дата.
Бывший. 2008:09:18:17:45:48-703- s.wav
А хотите переименовать его в:
20080918.174548.703.s.wav
В основном для того, чтобы удалить ':' и сделать формат более удобочитаемым для человека и его легче разделить.
Я знаю, что переименование - это то, что я ищу, но регулярное выражение не работает.Я печатаю:
переименовать 's/(\d):(\d):(\d):(\d):(\d):(\d):(\d)-(.?)-(.?). wav/$1$2$3.$4$5$6.$7.$8. wav/' ./*
Решение
Вам нужно учитывать множественность:
rename 's/(\d+)\:(\d+)\:(\d+)\:(\d+)\:(\d+)\:(\d+)-(.*)-(.?).wav/$1$2$3.$4$5$6.$7.$8.wav/' ./*
Другие советы
rename 's/(\d+):(\d+):(\d+):(\d+):(\d+):(\d+)-([^-]+)-([^.]+).wav/$1$2$3.$4$5$6.$7.$8.wav/' ./*
следует использовать - в вашей версии вы всегда сопоставляете только одну цифру.Кроме того, нет необходимости избегать :.
Если это то, что ты собираешься сделать только один раз, я бы сделал это таким образом:
1) перенесите файлы в новый файл:ls datadir > mytmp 2) отредактируйте mytmp с помощью вашего любимого редактора.2a удалите все строки, которые не являются файлами данных, которые вас интересуют, например "." и ".." 2b отредактируйте каждую строку в командной строке, чтобы переименовать файл.Мне нравится emacs, и я бы создал макрос клавиатуры для:обрежьте имя файла, вставьте "mv", вставьте имя файла, вставьте пробел, снова вставьте имя файла, отредактируйте вставленное имя файла в желаемый формат.2c сохранить 3) запустить sh < mytmp
Сделано!Не элегантно, утомительно, если ваш редактор не поддерживает макросы или подобную функциональность, но гарантированно работает и git-er-done.