Muy bien, problema tan simple aquí. Estoy trabajando en un código de respaldo simple. Funciona bien, excepto si los archivos tienen espacios. Así es como busco archivos y los agrego a un archivo tar:
find . -type f | xargs tar -czvf backup.tar.gz
El problema es cuando el archivo tiene un espacio en el nombre porque tar piensa que es una carpeta. Básicamente, ¿hay alguna forma de que pueda agregar citas alrededor de los resultados de la búsqueda? ¿O una forma diferente de solucionar este problema?
find ... | xargs ...
es utilizar el / -0 parámetro en cada -print0:find -print0 ... | xargs -0 ...
. Esto hará que los nombres de archivo estén separados por un carácter nulo, lo que significa que puede tener espacios o nuevas líneas u otras cosas raras en sus nombres de archivo y seguirá funcionando.Respuestas:
Utilizar este:
Va a:
tar -c
conxargs
lo hará cuando tenga una gran cantidad de archivosVer también:
fuente
-print0
aplica solo a la última expresión. Por ejemplofind . \( -type f -o -name '*.c' \) -print0 | ...
c:\cygwin\bin\find . -regextype posix-egrep -regex '.*(sln^|vcxproj^|filters)$' -print0 | c:\cygwin\bin\tar -cvf MS_Projects.tar --null -T -
-T
, y significa leer los nombres de archivo de la entrada estándar: si le da un solo guión como nombre de archivo para `--files-from ', (es decir, especifica --files-from = - o -T -), los nombres de los archivos se leen desde la entrada estándarPodría haber otra forma de lograr lo que desea. Básicamente,
Luego tar con la opción -T que le permite tomar una lista de ubicaciones de archivos (¡la que acaba de crear con buscar!)
fuente
Intenta ejecutar:
fuente
Por qué no:
Seguro que es inteligente usar find y luego xargs, pero lo estás haciendo de la manera difícil.
Actualización: Porges ha comentado con una opción de búsqueda que creo que es una mejor respuesta que mi respuesta, o la otra:
find -print0 ... | xargs -0 ....
fuente
xargs ... tar c ...
sobrescribirá el primer archivo creado si la lista de archivos es demasiado larga yxargs
se ejecutarátar
por segunda vez. Para evitar la sobrescritura, puede utilizar,xargs -x
pero el archivo podría estar incompleto. La alternativa podría ser primerotar c ...
y luego posiblemente repetidamentetar r ...
. (mi contribución a la fiabilidad :)Si tiene varios archivos o directorios y desea comprimirlos en un
*.gz
archivo independiente , puede hacerlo. Opcional-type f -atime
Esto comprimirá
a
fuente
¿Por qué no probar algo como esto?
tar cvf scala.tar `find src -name *.scala`
fuente
Otra solución como se ve aquí :
fuente
Agregaría un comentario a la publicación de @Steve Kehlet pero necesito 50 repeticiones (RIP).
Para cualquiera que haya encontrado esta publicación a través de numerosas búsquedas en Google, encontré una manera no solo de encontrar archivos específicos dado un rango de tiempo, sino también de NO incluir las rutas relativas O los espacios en blanco que causarían errores de tarificación. (MUCHAS GRACIAS STEVE.)
.
directorio relativo-name "*.pdf"
busque archivos PDF (o cualquier tipo de archivo)-type f
tipo para buscar es un archivo-mtime 0
buscar archivos creados en las últimas 24 horas-printf "%f\0"
Regular-print0
O-printf "%f"
NO funcionó para mí. De las páginas man:-czvf
crear archivo, filtrar el archivo a través de gzip, enumerar detalladamente los archivos procesados, nombre del archivoEditar 2019-08-14: Me gustaría agregar que también pude usar esencialmente el mismo comando en mi comentario, solo usando tar en sí:
Necesario
--ignore-failed-read
en caso de que no haya nuevos PDF para hoy.fuente
La mejor solución parece ser crear una lista de archivos y luego archivarlos porque puede usar otras fuentes y hacer algo más con la lista.
Por ejemplo, esto permite usar la lista para calcular el tamaño de los archivos que se archivan:
fuente