tar
fará isso por você muito rápido.
TESTE
Primeiro, criei 2 diretórios e 10 arquivos:
% 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
Então eu os copiei:
% 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
TRANSFORMAR
Portanto, o GNU tar
aceitará um sed --transform=EXPRESSION
para renomear arquivos. Isso pode até renomear apenas alguns dos arquivos. Por exemplo:
% 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
Então essa é uma vantagem.
CORRENTE
Considere também que são apenas dois tar
processos - e que não serão alterados independentemente da sua contagem de arquivos.
tar | tar
tar
é tão otimizado quanto você gostaria que fosse. Isso nunca terá contagens de argumentos de problemas ou processos filhos em fuga. Isso é apenas A> B feito.
ARGUMENTOS
Eu uso 7 argumentos distintos combinados entre meus dois tar
processos aqui. O mais importante é listado aqui primeiro:
-
stdout / stdin - informa tar
que transmitirá sua entrada ou saída para a stdin/stdout
qual interpretará corretamente, dependendo de estar construindo ou extraindo um arquivo morto.
-c
create - isto diz tar
para construir o arquivo. O próximo argumento tar
espera é ...
-f
arquivo - especificamos que tar
trabalhará com um file
objeto, em vez de um dispositivo de fita ou qualquer outra coisa. E o arquivo com o qual ele estará trabalhando, como observado acima, é stdin/stdout
- em outras palavras, nosso |pipe
.
./*
todos os $ PWD / arquivos - não há muito a explicar aqui, exceto que o argumento de arquivamento vem primeiro, -
então ./*
.
... e do outro lado da |pipe
...
-C
alterar diretório - informa tar
que ele precisa mudar para o diretório especificado antes de executar qualquer outra ação, tão efetivamente cd ../test2
antes da extração.
--transform='s/ed/EXPR/'
- como já foi mencionado, isso foi renomeado. Mas os documentos indicam que ele pode ter qualquer sed
expressão ou //flag
.
-x
extrair - depois de tar
alterar nosso diretório de destino e receber nossas instruções de renomeação, instruímo-lo a começar a extrair todos os arquivos em seu diretório atual a partir do -f - |pipe
arquivo morto. Sem mistério.
mc
gerenciador de arquivos tem um suporte mais amplo para esse tipo de renomeação em massa.