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
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.
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
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.
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 {})' \;