unzip
possui uma opção bacana -j
, na qual a estrutura de diretórios do archive é descartada e todos os arquivos são extraídos no mesmo diretório.
Existe uma maneira de fazer o tar
trabalho da mesma maneira? Nada na página do manual parece indicar isso.
Então, existe uma alternativa, preferencialmente Software Livre, ferramenta que fará isso?
Respostas:
O alcatrão GNU vive com característica, então naturalmente também tem algumas opções para isso.
http://www.gnu.org/software/tar/manual/html_node/transform.html
Se você apenas deseja remover alguns segmentos de caminho, então
--strip-components=n
ou--strip=n
fará o seguinte:Mas também é possível regexcrever os arquivos a serem extraídos (os sinalizadores são
--transform
or--xform
e aceitam ereg com o/x
modificador):Para listar um alcatrão, você precisa da
--show-transformed
opção adicional :Acredito que as opções de reescrita também funcionem para embalagem, não apenas para extração. Mas
pax
tem obviamente uma sintaxe melhor.fonte
s#.*/##
?--strip
não mencionado na página do manual os x tar, mas funciona mesmo assim, obrigado!--strip
e--strip-components
?Você pode fazer isso facilmente em duas etapas. Adapte conforme necessário:
fonte
find -exec mv -i
vez defind | xargs
) .... etapas simples que posso repetir em qualquer sistema sem ter que carregar um script para fazer isso por mim.tmpdir=$( mktemp -d )
é útil ao criar diretórios temporáriospax
pode fazer isso:ou
Você pode verificar a operação de substituição de nome primeiro, omitindo a
-r
opção.fonte
Uma solução possível que não requer a instalação de nada.
tar tvf
para pegar todos os arquivos do tarballExtraia esses arquivos individualmente - faça a extração do tar para stdout e redirecione para $ filename
salve como extract.sh e execute como
extract.sh myfile.tar
. Ele também substituirá quaisquer nomes de arquivos duplicados encontrados nos diretórios extraídos do tarball.fonte
A
-O
opção extrai um arquivo para o padrão e>
redireciona essa saída para um arquivo. Então, no meu exemplo, estou extraindo foo.mp3 e redirecionando-o para bar.mp3. Os nomes dos arquivos são arbitrários.fonte