Parece que tengo un problema. Tengo algunos tipos de archivos diferentes en mi directorio actual y solo quieroalquitránel.pngarchivos. Empecé con esto:
find -name "*.png" | tar -cvf backupp.tar
No funcionaría porque no especificé qué archivos, así que viendo cómo lo hacían otros, agregué xargs:
find -name "*.png" | xargs tar -cvf backupp.tar
Esta vez funcionó y se creó el archivo backupp.tar, pero aquí está el problema. Parece que no puedo extraerlo. Cada vez que escribo:
tar -xvf backupp.tar
No pasa nada. Intenté cambiar chmod y sudo, pero nada cede.
Entonces, ¿escribí el comando completamente incorrecto o hay algo que me perdí?
Respuesta1
Cada uno de sus dos enfoques estuvo cerca de funcionar, pero cada uno tenía un problema distinto.
En su primer enfoque, intenta canalizar una lista de archivos a tar
. Si desea tar
leer la lista de archivos desde la entrada estándar, debe usar las opciones -T
/ --files-from
y , por ejemplo-
find -name '*.png' -print0 | tar -cvf backup.tar --null -T -
Para obtener una referencia, consulte la documentación oficial:
NOTA:El uso de las banderas -print0
y --null
debería garantizar que esto también maneje nombres de archivos que incluyan espacios en blanco.
En su segundo enfoque, intenta ejecutar tar
a través de xargs
, pero está usando la opción "crear" ( --create
/ -c
). Si utiliza la opción "crear" con xargs
o en un bucle for, sobrescribirá el archivo después de cada iteración. En su lugar, intente utilizar la opción "añadir" ( -a
/ --append
) o la opción "actualizar" ( -u
/ --update
), por ejemplo:
find -name "*.png" -exec tar -uvf backupp.tar {} \;
Esto agregará archivos al archivo después de cada iteración en lugar de sobrescribirlo.
De cualquier manera, una vez que haya terminado, puede usar la opción "lista" ( --list
/ -t
) para ver el contenido del archivo y verificar que todo funcionó como se esperaba:
tar tf backupp.tar
Respuesta2
Simplemente puedes usar el comodín.
tar -cvf backup.tar *.png
o mediante el usofind
find -name "*.png" | tar -cvf backup.tar -T -
la -T
opción obtiene el nombre del archivo de ARCHIVO que en este caso es stdin-