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 tar
zaakceptuje sed --transform=EXPRESSION
zmianę 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 tar
procesy - i to się nie zmieni bez względu na liczbę plików.
tar | tar
tar
jest 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 tar
procesami. 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/stdout
których będzie poprawnie interpretować w zależności od tego, czy buduje, czy rozpakowuje archiwum.
-c
utwórz - mówi, tar
aby zbudować archiwum. Następny argument tar
oczekuje ...
-f
plik - określamy, że tar
będzie działał z file
obiektem, 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
...
-C
zmień katalog - informuje tar
, że musi przejść do katalogu, który podam przed wykonaniem jakiejkolwiek innej akcji, a więc skutecznie cd ../test2
przed rozpakowaniem.
--transform='s/ed/EXPR/'
- jak już wspomniano, zmieniła nazwę. Ale dokumenty wskazują, że może przyjąć dowolny sed
wyraz lub //flag
.
-x
wyodrębnij - po tar
zmianach w naszym katalogu docelowym i otrzymaniu instrukcji zmiany nazwy instruujemy go, aby rozpoczął rozpakowywanie wszystkich plików do bieżącego katalogu z -f - |pipe
pliku archiwum. Bez tajemnicy.
mc
menedżer plików ma najbardziej rozbudowane wsparcie dla tego rodzaju masowych nazw.