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 -