Если вы хотите изменить имя файлов вместо содержимого, вот еще один способ, используя команды find
и xargs
и Perl-скрипт с именем rename
(это пример сценарияпоставляется с Perl и доступен в Debian через пакет rename
.
% find -type f -name '*.ods' | xargs rename -n 's!(.+/)(.+)!$1 . lc($2)!e'
Преимущество использования этого сценария в том, что вы можете сначала выполнить симуляцию (сухой режим) перед тем, как фактически изменить имена файлов, используяопция -n
.Как только вы подтвердите, что результат соответствует вашим ожиданиям, вы снова запустите без опции -n
.
Примеры файлов:
% find
.
./Sub1
./Sub1/FOUR.ODS
./Sub1/three.ods
./Sub1/Two.ods
./sub2
./sub2/five.ODS
./sub2/Five.ods
./One.ods
Пример вывода:
rename(./Sub1/Two.ods, ./Sub1/two.ods)
rename(./sub2/Five.ods, ./sub2/five.ods)
rename(./One.ods, ./one.ods)
Еще одна альтернатива - использование сценария perlmv , доступного в CPAN (установите его, например, cpanm -n App::perlmv
).Этот скрипт прославлен в форме rename
и поддерживает рекурсивный режим, поэтому вы можете пропустить, используя find
и xargs
:
% perlmv -d -R -e'$_ = lc if /\.ods$/' .
. -d
предназначен для режима пробного запуска, -R
для рекурсивного.Пример вывода:
INFO: chdir `/zpool_host_mnt/mnt/home/s1/tmp/ods/.` ...
DRYRUN: move `One.ods` -> `one.ods`
INFO: chdir `/zpool_host_mnt/mnt/home/s1/tmp/ods/Sub1` ...
DRYRUN: move `Two.ods` -> `two.ods`
INFO: chdir `/zpool_host_mnt/mnt/home/s1/tmp/ods/sub2` ...
DRYRUN: move `Five.ods` -> `five.ods`
Если вы уверены, что получили правильные результаты, удалите параметр -d
.