6 votos

Devuelve Una Lista De Citados Archivos De Rutas Utilizando Encontrar

Me gustaría crear un archivo comprimido que contiene los archivos de un directorio que tiene un ctime de menos de 30 días. La mayoría de los tutoriales que he encontrado básicamente han recomendado hacer algo como esto:

tar cvf foo.tar $(find ~/POD -type f -ctime -30)

El problema es que muchos de los archivos que quiero tar contener espacios en su nombre. Esto significa que el tar comando delimitar basado en una de los espacios, lo que significa que el archivo completo de caminos será quebrantado.

Así que ahora estoy tratando de hacer la find comando devuelve una lista de archivos citados caminos. Así que aquí está lo que he intentado:

find . -type f -ctime -30  | xargs printf "\"%s\"\n"

Pero este comando también rompió todos los nombres de archivo basados en los espacios. Así que he intentado esto:

oldifs=$IFS
IFS=\n
find . -type f -ctime -30  | xargs printf "\"%s\"\n"
IFS=$oldifs

Pero esto me dio los mismos resultados.

Es allí una manera de que me puede pasar los nombres de ruta completos a tar y tener todo el trabajo con espacios en sus nombres?

6voto

geekosaur Puntos 3587

GNU tar tiene un -T opción para tomar la lista de archivos de un archivo especificado. Yo usaría find ... -print0 | tar cfzT outfile.tgz - --null así tar recibe terminada en null nombres de archivo en stdin.

1voto

Caleb Puntos 7556

La terminada en null de la salida de corriente a tarsugerido por geekosaur debe hacer el truco, pero también se puede hacer esto con la -exec opción de encontrar. Encontrar, sabe que este es un problema difícil así lo han resuelto, usted sólo tiene que poner las cosas al revés de lo que trató de hacer con tar … $(find …) y el uso de find a llamar a tar lugar como este:

find . -type f -ctime -30 -exec tar cfz outfile.tgz {} +

0voto

Jeff Strunk Puntos 1254

Casi lo tenía. Usted necesita para escapar \n $'\n' para asignar una nueva línea a una variable.

oifs=$IFS; IFS=$'\n'; tar cvf foo.tar $(find ~/POD -type f -ctime -30); IFS=$oifs

Ver la Cotización de la sección de la página man de bash para obtener más información.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: