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/