Encontre um arquivo e extraia-o no diretório onde está localizado

0

Eu quero encontrar um arquivo tar que seja apresentado em qualquer diretório e descompacte-o em um comando de uma linha. Eu sou capaz de encontrá-lo separadamente do diretório home. mas só pode extraí-lo do diretório onde está localizado. Como posso fazer as duas coisas em uma única linha usando pipe?

find -name any.tar ; tar xf any.tar eu tentei com isso .. eu posso encontrar esse arquivo any.tar de qualquer diretório separadamente. E tar xf também está extraindo o arquivo com poucos recursos, mas apenas no diretório em que any.tar está localizado. Eu quero executar ambos os comandos em uma única linha que pode encontrar o any.tar e extraí-lo quando o comando é compilado a partir do diretório home.

Eu sou inteiramente novo no Unix por favor me ajude. Obrigado.

    
por CSE 06.09.2014 / 19:40

3 respostas

2

Isso pode ajudar

find ./ -name '*.tar' -exec sh -c 'dir=$(dirname "$0"); tar -xvf "${0}" -C "${dir}"; done' {} \;

De man página de tar

-C, --directory DIR
       change to directory DIR
    
por 06.09.2014 / 21:02
0

Primeiro é o seguinte:

Para encontrar todos os arquivos tar em um diretório, você precisará de find $directory -iname "*.tar" Nota: -iname é uma extensão gnu, portanto, se você não estiver usando o gnu, terá que fazer -name *.tar -o -name *.TAR , isso é quase equivalente.

Agora, adicione seu comando TAR de trabalho:

find $directory -iname "*.tar" -print0 | xargs -0 --max-args=1 tar xf

Isso irá extrair todos os arquivos tar para o diretório de trabalho atual.

    
por 07.09.2014 / 11:26
0

Eu encontrei esta página procurando a mesma pergunta, a sugestão não funcionou diretamente para mim, mas ajustando um pouco o meu caso de uso:

find . -name "*.tar" -exec sh -c 'tar xvf {} -C $(dirname {})' \;
    
por 10.12.2018 / 13:38

Tags