tar zrobi to dla ciebie naprawdę szybko.
TEST
Najpierw stworzyłem 2 katalogi i 10 plików:
% 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
Następnie skopiowałem je:
% 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
PRZEKSZTAŁCAĆ
Dlatego GNU tarzaakceptuje sed --transform=EXPRESSIONzmianę nazwy pliku. Może to nawet zmienić nazwę tylko niektórych plików. Na przykład:
% 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
To jedna zaleta.
STRUMIEŃ
Weź również pod uwagę, że są to tylko dwa tarprocesy - i to się nie zmieni bez względu na liczbę plików.
tar | tar
tarjest tak zoptymalizowany, jak tylko chcesz. To nigdy nie będzie miało problemów z liczeniem argumentów lub niekontrolowanymi procesami potomnymi. To jest po prostu zrobione A> B.
ARGUMENTY
Używam tutaj 7 różnych argumentów połączonych między moimi dwoma tarprocesami. Najważniejszy wymieniono tutaj jako pierwszy:
-stdout / stdin - informuje tar, że będzie przesyłać strumieniowo dane wejściowe lub wyjściowe do lub z stdin/stdoutktórych będzie poprawnie interpretować w zależności od tego, czy buduje, czy rozpakowuje archiwum.
-cutwórz - mówi, taraby zbudować archiwum. Następny argument taroczekuje ...
-fplik - określamy, że tarbędzie działał z fileobiektem, a nie z urządzeniem taśmowym lub czymkolwiek. Plik, z którym będzie współpracował, jak wspomniano powyżej, jest stdin/stdout- innymi słowy, nasz |pipe.
./*wszystkie $ PWD / pliki - nie za dużo do wyjaśnienia tutaj, z wyjątkiem tego, że argument archiwum jest na pierwszym miejscu, więc -wtedy ./*.
... a po drugiej stronie |pipe...
-Czmień katalog - informuje tar, że musi przejść do katalogu, który podam przed wykonaniem jakiejkolwiek innej akcji, a więc skutecznie cd ../test2przed rozpakowaniem.
--transform='s/ed/EXPR/'- jak już wspomniano, zmieniła nazwę. Ale dokumenty wskazują, że może przyjąć dowolny sedwyraz lub //flag.
-xwyodrębnij - po tarzmianach w naszym katalogu docelowym i otrzymaniu instrukcji zmiany nazwy instruujemy go, aby rozpoczął rozpakowywanie wszystkich plików do bieżącego katalogu z -f - |pipepliku archiwum. Bez tajemnicy.
mcmenedżer plików ma najbardziej rozbudowane wsparcie dla tego rodzaju masowych nazw.