2011-02-04 17 views
10

mis tree comando devuelveCómo crear archivo tar plana

tmp 
`-- t 
    `-- e 
     |-- 23.ps 
     `-- s 
      |-- adsf.ps 
      `-- t 
       `-- dupa.ps 

¿Cómo puedo crear ps.tar.gz archivo en el directorio tmp con el siguiente estructura:

tmp 
|-- ps.tar.gz 
| |-- 23.ps 
| |-- adsf.ps 
| `-- dupa.ps 
`-- t 
    `-- e 
     |-- 23.ps 
     `-- s 
      |-- adsf.ps 
      `-- t 
       `-- dupa.ps 

?

+0

mkdir archive; encuentre t/-name * .ps -exec ln {} archive/\; ; (archivo cd && tar zcf ../ps.tar.gz * .ps); rm -rf archivo – sastanin

Respuesta

4
outfile=$(pwd)/ps.tar;find . -type f | while read file; do 
    tar rf $outfile -C $(dirname $file) $(basename $file) 
done 
gzip $outfile 
+1

sin necesidad de "cd", use tar's -C! – chris

+0

buen punto Chris, ¡actualizado para usarlo! – cowsandmilk

+1

Si te gusta hacer lo anterior en un oneliner: encontrar. -type f -exec bash -c "archivo =./ps.tar.gz; fname = \' nombrebase {} \ '; fdir = \' dirname {} \ '; tar cfz \ $ archivo -C \ $ fdir \ $ fname "\; – Qben

11

para GNU tar puede utilizar el argumento --xform. Toma una expresión sed y la aplica en cada nombre de archivo. Por lo tanto, para eliminar todos los caracteres hasta el último /, puede usar:

tar -c --xform s:^.*/:: your-files 
+0

Se pueden obtener mejores resultados para múltiples directorios en combinación con http://serverfault.com/a/566345/343194. Algo como 'find ./commondir -type f | tar --transform 's /.*\/// g' -cvzf ./file.tar.gz --files-from =/dev/stdin'. De esta manera, los directorios secundarios vacíos serán excluidos. –

Cuestiones relacionadas