webcheck traduccion telefono promociones check asientos aerolineas tar

tar - traduccion - alquitrán con--incluir patrón



tar traduccion (2)

El siguiente es un fragmento de una secuencia de comandos que tengo que intenta eliminar todos los archivos php en un subdirectorio. Intenta usar el parámetro ''--include'' pero no parece funcionar (la salida es de ''set -x'' en bash)

+ find . -name ''*.php'' ./autoload.php ./ext/thrift_protocol/run-tests.php ./protocol/TBinaryProtocol.php ... ./transport/TTransportFactory.php + tar -cvjf my.tar.bz2 ''--include=*.php'' . + set +x

El find encontró varios archivos php pero tar no parece verlos. Si saco el --include todos los archivos están marcados.

Sé que puedo usar Buscar para alimentar una lista ( find . -name ''*.php'' -print0 | tar -cvjf "my.tar.bz2" --null -T - ), pero ¿qué hay de malo con el --include ?


En realidad, solo busqué en tar(1) en mi sistema de Freebsd y encontré una opción --include (antes había consultado alguna página antigua en línea). Las opciones --include son bastante poderosas. Aquí hay unos ejemplos

Estos son los archivos

cnicutar@uranus ~/tar_test $ ls -1 a.c b.c x

Tar simple, archiva todo.

cnicutar@uranus ~/tar_test $ tar -cvf archive1.tar * a a.c a b.c a x

Archivar solo archivos C

cnicutar@uranus ~/tar_test $ tar -cvf archive2.tar --include=''*.c'' * a a.c a b.c

Entonces, lo que probablemente está mal en tu guión es que das tar . en lugar de .* como el último argumento.

EDITAR

Lo he probado y me ha sorprendido. El comportamiento de tar(1) es inesperado pero (creo) intencionado. La página del manual dice:

Process only files or directories that match the specified pattern.

Entonces, cuando especifica el patrón, filtra los directorios que no lo coinciden. Entonces, si sus directorios no tienen esa extensión (es válida pero poco común) no descenderá a ellos (incluso si en el fondo podría haber archivos "interesantes").

Así que en conclusión, creo que sería mejor utilizar otra forma de enumerar recursivamente + filtrar archivos.


GNU tar tiene una opción -T o --archivos-desde que puede tomar un archivo que contiene una lista de patrones para incluir. El archivo especificado con esta opción puede ser "-" para stdin. Por lo tanto, puede pasar una lista arbitraria de archivos para tar para archivar desde la entrada estándar usando -files-from - . Tu ejemplo se convierte en:

find . -name ''*.php'' | tar -cvjf my.tar.bz2 --files-from -