Isso deve funcionar
cd ../source && tar -cvf foo.tar test*.txt;
mv ./foo.tar /home/user/target/ && cd ../origlocation
No terminal Linux:
Eu estou em uma pasta dizer /home/user/origlocation/
eu preciso ir para uma pasta digamos ../source/
e encontrar todos os arquivos com o nome test*.txt
. Então eu preciso compactar (tar.gz) esses arquivos para um local, digamos /home/user/target/
e, o mais importante, sem a estrutura de diretórios no arquivo tar (eu preciso apenas dos nomes de arquivos nos resultados de tar extraídos imediatamente). Por favor ajude.
Supondo que você tenha um novo tar
, você pode fazer isso:
find ../source -name 'test*.txt' | tar --transform='s,.*/,,' -cvzf /home/user/target/test-txt.tar.gz -T-
Isso funciona usando find
para gerar uma lista de arquivos no diretório de destino e abaixo. tar
lê essa lista do pipe como stdin
(usando "-T-"), depois cria o archive desejado (incluindo a compactação com gzip
), transformando os caminhos do arquivo de saída usando a expressão sed
, que remove todos os principais componentes de diretório.
Se, de fato, todos os seus arquivos estiverem em um único diretório, é mais simples ainda:
(cd ../source; tar -cvzf /home/user/target/test-txt.tar.gz test*.txt)
Isso funciona usando um sub-shell para movê-lo para o diretório de destino, mas ainda grava o arquivo tar no local final necessário. Nenhum componente de diretório é incluído porque você está usando um shell glob simples para selecionar os arquivos no diretório de trabalho).
Tags command-line tar linux