Linux zip y tar todos los archivos con una extensión específica que mantiene de forma recursiva la estructura de directorios

0

Similar a ésto pregunta y esto pregunta Me gustaría crear un solo archivo tar comprimido (files.tar.gz) que contenga todos los archivos php en mi webroot y todos sus subdirectorios, manteniendo la estructura de carpetas. Mi webroot se llama 'public_html'.

No he probado nada todavía porque no estoy seguro de por dónde empezar. La segunda pregunta que vinculé en realidad se acerca mucho a lo que estoy buscando, pero hace que cada archivo encontrado sea un GZ separado, si lo leo bien.

En realidad, la naturaleza monolítica del alquitrán es más importante para mí que la compresión de gzip. Solo quiero colocar este archivo en mi máquina de Windows donde puedo buscarlo con las herramientas a las que estoy acostumbrado.

TecBrat
fuente
Creo que necesito comprobar mis hechos. Acabo de probar find . -name '*.html' -print | xargs echo en mi propio webroot. imprime un linea sola . Por lo tanto, el ejemplo 2 al que está vinculado crea un solo archivo
Hennes

Respuestas:

4

find -iname '*.php' -print0 | xargs -0 tar -rf php_backup.tar

Esto utiliza la segunda respuesta a la que está vinculado, pero reemplaza la -c con -r

De man tar:

-c      Create a new archive containing the specified items.
-r      Like -c, but new entries are appended to the archive.  Note that
        this only works on uncompressed archives stored in regular files.
        The -f option is required.

Otra opción sería reemplazar el -print0 con -exec. Creo que será más eficiente, pero podría romperse si tienes miles o diez de miles de archivos.

[Editar]

1) La opción -print0 y -0 después de xargs solo son necesarias si tiene separadores inconvenientes en sus nombres de archivo. (leer nombres con espacios). Puede que no necesites esos.

2) Revisé el comando otra vez y lo probé. find /public_www -name '*.php' -print | xargs alimenta una sola línea a xargs. Por lo tanto, el ejemplo que has vinculado se traduce en algo así como xargs -0 tar -cf docs.tar *.php y también debería funcionar.

Hennes
fuente
Gracias. Probé su primera versión y, por lo que sé, funcionó perfectamente, pero es bueno tener la información adicional para el próximo usuario.
TecBrat