переименование файлов в каталоге

У меня есть файлы в каталоге. Имена файлов создаются с помощью нотации метки времени даты, имена файлов имеют форму:

name_YYMM.csv

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

name_YYYYMM.csv

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

Любая справка о том, как решить этот prob, будет цениться.

Я работаю на Ubuntu

2
задан 10.12.2010, 13:55

3 ответа

Очень простой способ сделать это

ls name* | while read a; do mv $a `echo $a | sed s/name_/name_20/`; done

или

ls name* | while read a; do mv $a $(echo $a | sed s/name_/name_20/); done

(так как использование одинарных левых кавычек обесценивается (или трудно читать так или иначе)),

это перечисляет все соответствие файлов name_ затем для каждого файла это находит, что заменяет name_ с name_20. Можно измениться от 20 до 19, если Вы работаете с файлами с прошлого тысячелетия.

2
ответ дан 08.12.2019, 07:29

Вероятно, что у Вас есть программа или названный сценарий Perl rename в Вашей системе.

Для версии сценария Perl:

rename 's/_/_20/' *_*.csv

Для util-linux-ng версии:

rename _ _20 *_*.csv

Или, использование Bash:

for f in name*; do mv "$f" "${f/_/_20}"; done
1
ответ дан 08.12.2019, 07:29

В zsh:

autoload zmv
zmv '(*_[0-9][0-9])([0-9][0-9].csv)' '${1}20${2}'

Можно сделать шаблон менее точным, например. '(*_??)(??.csv)' или даже '(*)(??).csv' если нет никакого риска другого соответствия файлов.

Если Вы не хотите использовать zsh, см. ответ Dennis Williamson.

0
ответ дан 08.12.2019, 07:29

Теги

Похожие вопросы