Estoy intentando tar
una colección de archivos en un directorio llamado 'my_directory' y elimino los originales usando el comando:
tar -cvf files.tar my_directory --remove-files
Sin embargo, solo está eliminando los archivos individuales dentro del directorio y no el directorio en sí (que es lo que especifiqué en el comando). ¿Que me estoy perdiendo aqui?
EDITAR:
Sí, supongo que la opción 'eliminar archivos' es bastante literal. Aunque también encontré la página del manual poco clara sobre ese punto. (En Linux, tiendo a no distinguir mucho entre directorios y archivos, y a veces olvido que no son lo mismo). Parece que el consenso es que no elimina directorios.
Sin embargo, mi principal punto de inflexión para hacer esta pregunta proviene del manejo de tar de los caminos absolutos. Debido a que debe especificar una ruta relativa a un archivo / s que se comprimirá, por lo tanto, debe cambiar al directorio principal para tar correctamente. Como lo veo, usar cualquier tipo de comando 'rm' de seguimiento es potencialmente peligroso en esa situación. Por lo tanto, esperaba simplificar las cosas haciendo que el alquitrán mismo elimine.
Por ejemplo, imagine una secuencia de comandos de copia de seguridad donde el directorio para la copia de seguridad (es decir, tar) se incluye como una variable de shell. Si el valor de la variable de shell se ingresó incorrectamente, es posible que el resultado se elimine de los archivos del directorio en el que se encontraba por última vez.
Respuestas:
Te falta la parte que dice que la
--remove-files
opción elimina archivos después de agregarlos al archivo.Puede seguir la operación de archivo y eliminación de archivos con un comando como,
Actualización: Puede que le interese leer esta breve discusión de Debian sobre el
error 424692: --remove-files se queja de que los directorios "cambiaron mientras lo leíamos" .
fuente
-c
cambia el directorio antes detar
comenzar su trabajo (y no regresa hasta que se hace)? Yo supongo que habría eliminado subdirectorios, si los que fueron incluidos en el archivo (pero no he probado eso).c'
tenga nada que ver con esto;'remove-files'
intencionalmente no elimina directorios.man
páginas no es muy clara, pero supongo que tienes razón. Aún así, no esperaría que el directorio mencionado-c
se elimine incluso sitar
también eliminé los directorios. (Para mí, eso sería como eliminar el directorio actual, por lo tanto, incluir el archivo en sí, cuando no se usa-c
...?) Pero si-remove-files
siempre deja los directorios en su lugar, entonces seguramente solo estoy complicando las cosas aquí. ;-)--remove-files
Se corrigió el errortar-1.19
.Como la
--remove-files
opción solo elimina archivos , puedes intentarpara que el directorio se elimine solo si
tar
devuelve un estado de salida de 0fuente
rmdir
solo elimina directorios vacíos . La idea era eliminar el directorio y los archivos que contiene (siempre quetar
sea exitoso)--remove-files
Se corrigió el errortar-1.19
.¿Has intentado poner la directiva --remove-files después del nombre del archivo? Esto funciona para mi.
fuente
--remove-files
antes o despuésmy_directory
; en ambos casos, el directorio se elimina.--remove-files
Se corrigió el errortar-1.19
.p.ej
p.ej
Entonces podría ejecutar algo en la línea de:
fuente
Esto probablemente fue un error.
También la palabra "archivo" es ambigua en este caso. Pero debido a que este es un cambio de línea de comando, esperaría que signifique también directorios, porque en unix / lnux todo es un archivo, también un directorio. (La otra interpretación, por supuesto, también es válida, pero no tiene sentido mantener directorios en ese caso. Consideraría un comportamiento inesperado y confuso).
Pero he encontrado que en gnu tar en algunas distribuciones gnu tar realmente elimina el árbol de directorios. Otra indicación de que mantener el árbol era un error. O al menos alguna solución hasta que lo arreglen.
Esto es lo que probé en una consola ubuntu 10.04:
Si desea verlo en su máquina, péguelo en una consola bajo su propio riesgo:
fuente