Localiza arquivos em uma pasta, compacta-os em um local de destino sem estrutura de diretório no terminal Linux

1

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.

    
por makkhi 03.03.2016 / 21:59

2 respostas

-1

Isso deve funcionar

cd ../source && tar -cvf foo.tar test*.txt;
mv ./foo.tar /home/user/target/ && cd ../origlocation
    
por 03.03.2016 / 22:11
2

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).

    
por 03.03.2016 / 23:02