findtar

Juan Carlos Rojas jrojas en conicyt.cl
Mie Dic 3 11:10:40 CLST 2008


La opción -exec trata una a una los resultados de find por eso cuando ejecuto find dir-origen -name *.pdf -exec tar -zcvf resultado.tgz {} \;
Finalmente genera el archivo resultado.tgz pero que solo contiene el utlimo archivo encontrado por find.

Lo siguiente funciona muy bien incluso con archivos cuyos nombres tienene espacios.

find -name '*.pdf'  | tar --files-from /dev/stdin -cvf foo.tar



find -exec para commandos mover cp rm funciona muy bien pero para un comando que debe actuar sobre todo el resultado de la busqueda de una ves se recomienda xargs pero aun asi no me empaqueta los archivos cuyos nombre tienene un espacio en blanco.



ATTE JCArlos






-----Mensaje original-----
De: linux-bounces en listas.inf.utfsm.cl [mailto:linux-bounces en listas.inf.utfsm.cl] En nombre de Aldrin Martoq
Enviado el: martes, 02 de diciembre de 2008 11:10
Para: Discusion de Linux en Castellano
Asunto: Re: findtar

On Tue, 2008-12-02 at 09:45 -0300, Juan Carlos Rojas wrote:
> Hola listeros generalmente utilizo la potencia de find en conjunto con tar sin problemas pero justo ahora me encontre con que existen algunos archivos cuyos nombres tienen estan separados por espacios en blanco.
> Al realizar la combinación find |xargs tar .... No me empaqueta los archivos cuyos nombres estan separados por espacios en blanco . me arroja
> tar: 2008: No se puede stat: No existe el fichero o el directorio
> tar: -: No se puede stat: No existe el fichero o el directorio

> Lo que sucede es que separa el nombre del archivo en tantas partes como palabras contenga su nombre

No debes usar xargs: te puedes topar con el largo maximo del buffer de
la linea de comandos. Usa find -exec, por ejemplo:

find -name '*.pdf' -exec tar A foo.tar {} \;



Ahora, estuve leyendo el manual y existe la opcion -T en tar. Algo como
esto:

find -name '*.pdf'  | tar --files-from /dev/stdin -cvf foo.tar



--
Aldrin Martoq <amartoq en dcc.uchile.cl>
http://aldrinvideopodcast.podshow.com/




Más información sobre la lista de distribución Linux