Quiero tar y todos los archivos .php y .html en un directorio y sus subdirectorios. Si uso
tar -cf my_archive *
alquila todos los archivos, que no quiero. Si uso
tar -cf my_archive *.php *.html
ignora los subdirectorios. ¿Cómo puedo convertirlo en tar de forma recursiva pero incluir solo dos tipos de archivos?
-o -name [pattern]
para cada nueva condiciónSi está utilizando la
bash
versión> 4.0, puede aprovecharshopt -s globstar
para hacer un trabajo rápido de esto:esto agregará todos los archivos .yml que comienzan con Alice desde cualquier subdirectorio y agregará todos los archivos .json que comiencen con Bob desde cualquier subdirectorio.
fuente
shopt -s globstar
opción, por lo que la respuesta es correcta y en realidad es la mejorUn método es:
Sin embargo, hay algunas advertencias con este método:
Una solución a esto podría ser generar el contenido del comando de búsqueda en un archivo y luego usar la opción "-T, --files-from FILE" para tar.
fuente
Esto manejará caminos con espacios:
fuente
Ponlos en un archivo
Luego use el archivo como entrada para tar, use -I o -T dependiendo de la versión de tar que use
Utilice h para copiar enlaces simbólicos
fuente
find ./ -type f -name "*.php" -o -name "*.html" -printf '%P\n' |xargs tar -I 'pigz -9' -cf target.tgz
para multinúcleo o solo para un núcleo:
find ./ -type f -name "*.php" -o -name "*.html" -printf '%P\n' |xargs tar -czf target.tgz
fuente
Utilice "buscar" y "grep" para obtener todas las rutas de los archivos .php y .html en todos los directorios y sus subdirectorios. Luego, pase esa información de ruta a tar para comprimirla.
Tenga cuidado con los símbolos "y". Tenga en cuenta también que esto alcanzará el límite de cuántos caracteres permitirá su shell en la línea de comando, a diferencia de algunas de las otras respuestas.
fuente