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: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 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 <[EMAIL PROTECTED]>
http://aldrinvideopodcast.podshow.com/


Responder a