Тема массового переименования файлов уже не нова. Способов переименовать файлы одним разом уйма, но в основном они оформлены в качестве скриптов. Я же в свою очередь хочу предложить пусть не самый правильный, но всетаки рабочий вариант массового переименования файлов одной командой.
На FreeBSD работает точно.
$ find ./ -type f -exec sh -c 'mv {} `echo {} | sed "s/some_pattern/to_name/"` ' \ ;
где some_pattern — это regexp-выражение маски файлов, которые мы будем переименовывать, а to_name — во что мы будем переименовывать. Естественно команда пишется в одну строку, без переноса.
Например переименуем все mp3 фалы в текущей директории в _old.mp3:
$ find ./ -type f -exec sh -c 'mv {} `echo {} | sed "s/.mp3/_old.mp3/"` ' \ ;
Вот как можно сделать префикс для всех файлов в текущей дериктории:
$ find ./ -type f -exec sh -c 'mv {} `echo {} | xargs basename | sed "s/^/prefix_/"`' \ ;
Надо не забывать экранировать специальные символны!
Так же могут быть добавлены другие флаги к find, к примеру — задания глубины поиска файлов. Чтобы find искал только в текущей дериктории и не трогал другие вложенные, достаточно добавить -d 1
No comments
RSS / trackback