tar сделаю это для вас очень быстро.
ТЕСТ
Сначала я создал 2 каталога и 10 файлов:
% mkdir test1 test2 ; cd test1
% for n in `seq 1 10` ; do touch ABC.file$n ; done
% ls
> ABC.file1 ABC.file2 ABC.file4 ABC.file6 ABC.file8
> ABC.file10 ABC.file3 ABC.file5 ABC.file7 ABC.file9
Затем я скопировал их:
% tar -cf - ./* |\
tar -C../test2 --transform='s/ABC/DEF/' -xf -
% ls ../test2
> DEF.file1 DEF.file2 DEF.file4 DEF.file6 DEF.file8
> DEF.file10 DEF.file3 DEF.file5 DEF.file7 DEF.file9
ПРЕОБРАЗОВАНИЯ
Поэтому GNU tarпримет sed --transform=EXPRESSIONпереименование файла. Это может даже переименовать только некоторые файлы. Например:
% tar -cf - ./* |\
tar -C../test2 --transform='s/ABC\(.*[0-5]\)/DEF\1/' -xf -
% ls ../test2
> ABC.file6 ABC.file8 DEF.file1 DEF.file2 DEF.file4
> ABC.file7 ABC.file9 DEF.file10 DEF.file3 DEF.file5
Так что это одно преимущество.
РУЧЕЙ
Также учтите, что это только два tarпроцесса - и это не изменится, независимо от количества файлов.
tar | tar
tarнастолько оптимизирован, насколько вы могли бы пожелать. У этого никогда не будет проблемных аргументов или сбежавших дочерних процессов. Это просто A> B сделано.
АРГУМЕНТЫ
Я использую 7 различных аргументов, объединенных между моими двумя tarпроцессами. Самый важный из них перечислен здесь первым:
-stdout / stdin - информирует о tarтом, что он будет транслировать свои входные или выходные данные, в stdin/stdoutкоторые он будет интерпретироваться правильно, в зависимости от того, создает он или извлекает архив.
-cсоздать - это говорит tarо создании архива. Следующий аргумент tarожидает ...
-ffile - мы указываем, что tarбудем работать с fileобъектом, а не с ленточным устройством или чем-то еще. И файл, с которым он будет работать, как отмечалось выше, stdin/stdout- другими словами, наш |pipe.
./*все $ PWD / файлы - здесь не так много объяснений, за исключением того, что аргумент архива идет первым, а -потом ./*.
... и на другой стороне |pipe...
-Cсменить каталог - он сообщает, tarчто ему нужно перейти в каталог, который я укажу, прежде чем выполнять какие-либо другие действия, поэтому он эффективен непосредственно cd ../test2перед извлечением.
--transform='s/ed/EXPR/'- как уже упоминалось, это было сделано переименование. Но документы указывают, что это может принять любое sedвыражение или //flag.
-xextract - после tarвнесения изменений в наш целевой каталог и получения наших инструкций по переименованию мы просим его начать извлечение всех файлов в свой текущий каталог из -f - |pipeфайла архива. Никаких загадок.
mcфайлового менеджера есть самая обширная поддержка для такого рода массовых переименований.