Estoy tratando de crear un tarball comprimido que contenga todos los archivos PDF que existen en uno de mis directorios. La estructura del directorio necesita ser retenida. No se necesitan directorios vacíos, pero realmente no me importa si están allí.
Por ejemplo, supongamos que tenía un directorio que se veía así:
dir
dir/subdir1
dir/subdir1/subsubdir1/song.mp3
dir/subdir2
dir/subdir2/subsubdir1
dir/subdir2/subsubdir1/document.pdf
dir/subdir2/subsubdir1/another-song.mp3
dir/subdir2/subsubdir1/top-ten-movies.txt
dir/subdir3
dir/subdir3/another-document.pdf
Después de ejecutar el comando, me gustaría que dir.tar.gz
contenga esto:
dir
dir/subdir2
dir/subdir2/subsubdir1
dir/subdir2/subsubdir1/document.pdf
dir/subdir3
dir/subdir3/another-document.pdf
¿Posible?
find docs \( -iname '*.pdf' -o -iname '*.mp3' \) -printf '"%p"\n' | xargs tar czf docs-media.tar.gz
\'"
(error de xargs), y no funcionará si hay demasiados nombres de archivo (error del núcleo).-printf '"%p"\n'
parte se encarga de eso (al menos lo hizo por mí).Con bash ≥4 o zsh y GNU tar:
Esto podría no funcionar si tiene una gran cantidad de archivos PDF y la línea de comando es demasiado larga. Entonces necesitaría una solución basada en hallazgos más compleja (nuevamente, usando GNU tar):
Alternativamente (y de forma portátil) puede crear el archivo con pax .
El primero
-s
dice que incluya todos los.pdf
archivos, sin cambiar su nombre. El segundo-s
dice cambiar el nombre de todos los demás archivos a un nombre vacío, lo que en realidad significa no incluirlos en el archivo.fuente
**
; Ni siquiera me di cuenta de que bash 4 tenía eso ahora