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
ожидает ...
-f
file - мы указываем, что tar
будем работать с file
объектом, а не с ленточным устройством или чем-то еще. И файл, с которым он будет работать, как отмечалось выше, stdin/stdout
- другими словами, наш |pipe
.
./*
все $ PWD / файлы - здесь не так много объяснений, за исключением того, что аргумент архива идет первым, а -
потом ./*
.
... и на другой стороне |pipe
...
-C
сменить каталог - он сообщает, tar
что ему нужно перейти в каталог, который я укажу, прежде чем выполнять какие-либо другие действия, поэтому он эффективен непосредственно cd ../test2
перед извлечением.
--transform='s/ed/EXPR/'
- как уже упоминалось, это было сделано переименование. Но документы указывают, что это может принять любое sed
выражение или //flag
.
-x
extract - после tar
внесения изменений в наш целевой каталог и получения наших инструкций по переименованию мы просим его начать извлечение всех файлов в свой текущий каталог из -f - |pipe
файла архива. Никаких загадок.
mc
файлового менеджера есть самая обширная поддержка для такого рода массовых переименований.