Переименовать кучу файлов в Debian - PullRequest
0 голосов
/ 27 октября 2009

У меня есть тысячи файлов, которые мне нужно переименовать в следующем формате. 2008: 09: 18: 17: 45: 48-alfanumeric-alfanumeric.wav первая часть является датой.

Ex. 2008: 09: 18: 17: 45: 48-703-s.wav

Хотите переименовать его в:

20080918.174548.703.s.wav

По сути, для удаления символа ':' и создания более удобочитаемого формата, который легче разбить.

Я знаю, что мне нужно переименовать, но регулярное выражение не работает. Я печатаю:

переименование «Ы / (\ d): (\ d): (\ d): (\ d): (\ d): - (.?) - (\ г) WAV / $ 1 $ 2 $ 3 $ 4 (.?). $ 5 $ 6 $ 7 $ 8.wav /» ./*

Ответы [ 3 ]

2 голосов
/ 27 октября 2009
rename 's/(\d+):(\d+):(\d+):(\d+):(\d+):(\d+)-([^-]+)-([^.]+).wav/$1$2$3.$4$5$6.$7.$8.wav/' ./*

следует использовать - в вашей версии вы всегда соответствуете только одной цифре. Кроме того, не нужно избегать:.

1 голос
/ 27 октября 2009

Если это то, что вы собираетесь делать только один раз, я бы сделал это так:

1) ls файлы в новый файл: ls datadir> mytmp 2) редактировать MyTMP с вашим любимым редактором. 2a удалите все строки, которые не являются файлами данных, которые вас интересуют, например "." а также ".." 2b отредактируйте каждую строку в команде оболочки, чтобы переименовать файл. Мне нравится Emacs, и создаст макрос клавиатуры для: обрезать имя файла, вставить «mv», вставить имя файла, вставьте пробел, вставьте имя файла снова, отредактируйте вставленное имя файла в желаемый формат. 2c сохранить 3) запустить sh

Готово! Не элегантно, утомительно, если ваш редактор не поддерживает макросы или аналогичную функциональность, но гарантированно работает и без проблем.

1 голос
/ 27 октября 2009

Вы должны учитывать кратности:

rename 's/(\d+)\:(\d+)\:(\d+)\:(\d+)\:(\d+)\:(\d+)-(.*)-(.?).wav/$1$2$3.$4$5$6.$7.$8.wav/' ./*
...