Je suis en train de tar
une collection de fichiers dans un répertoire appelé « my_directory » et retirer les originaux en utilisant la commande:
tar -cvf files.tar my_directory --remove-files
Cependant, il supprime uniquement les fichiers individuels à l'intérieur du répertoire et non le répertoire lui-même (ce que j'ai spécifié dans la commande). Qu'est-ce que j'oublie ici?
MODIFIER:
Oui, je suppose que l'option 'remove-files' est assez littérale. Bien que moi aussi j'ai trouvé la page de manuel peu claire sur ce point. (Sous Linux, j'ai tendance à ne pas vraiment faire de distinction entre les répertoires et les fichiers, et j'oublie parfois qu'ils ne sont pas la même chose). Il semble que le consensus est qu'il ne supprime pas les répertoires.
Cependant, mon principal point de départ pour poser cette question découle de la gestion par tar des chemins absolus. Étant donné que vous devez spécifier un chemin d'accès relatif à un ou plusieurs fichiers à compresser, vous devez par conséquent modifier le répertoire parent pour le tarer correctement. Comme je le vois, utiliser n'importe quel type de commande «rm» de suivi est potentiellement dangereux dans cette situation. J'espérais donc simplifier les choses en faisant tar lui-même faire le retrait.
Par exemple, imaginez un script de sauvegarde dans lequel le répertoire à sauvegarder (c'est-à-dire. Tar) est inclus en tant que variable shell. Si cette valeur de variable shell a été mal entrée, il est possible que le résultat soit des fichiers supprimés du répertoire dans lequel vous vous trouviez en dernier.
Réponses:
Il vous manque la partie qui dit que l'
--remove-files
option supprime les fichiers après les avoir ajoutés à l'archive.Vous pouvez suivre l'opération d'archivage et de suppression de fichiers avec une commande comme,
Mise à jour: Vous pouvez être intéressé par la lecture de cette courte discussion Debian sur le
bogue 424692: --remove-files se plaint que les répertoires "ont changé au fur et à mesure que nous le lisons" .
la source
-c
change de répertoire avant detar
commencer son travail (et ne revient en quelque sorte qu'une fois terminé)? Je suppose que cela aurait supprimé des sous-répertoires, si ceux-ci étaient inclus dans l'archive (mais je n'ai pas testé cela).c'
ait quelque chose à voir avec cela;'remove-files'
ne supprime pas intentionnellement les répertoires.man
pages pas trop claire à ce sujet, mais je suppose que vous avez raison. Pourtant, je ne m'attendrais pas à ce que le répertoire mentionné-c
soit supprimé même s'iltar
supprimait également les répertoires. (Pour moi, ce serait comme supprimer le répertoire courant, donc inclure l'archive elle-même, quand on n'utilise pas-c
...?) Mais si-remove-files
toujours laisse les répertoires en place, je ne fais que compliquer les choses ici. ;-)--remove-files
le bug a été corrigétar-1.19
.Étant donné que l'
--remove-files
option supprime uniquement les fichiers , vous pouvez essayerde sorte que le répertoire est supprimé uniquement si le
tar
renvoie un état de sortie de 0la source
rmdir
ne supprime que les répertoires vides . L'idée était de supprimer le répertoire et les fichiers qu'iltar
--remove-files
le bug a été corrigétar-1.19
.Avez-vous essayé de mettre la directive --remove-files après le nom de l'archive? Ça marche pour moi.
la source
--remove-files
avant ou aprèsmy_directory
; dans les deux cas, le répertoire est supprimé.--remove-files
le bug a été corrigétar-1.19
.par exemple
par exemple
Ensuite, vous pouvez exécuter quelque chose comme:
la source
C'était probablement un bug.
Le mot "fichier" est également ambigu dans ce cas. Mais comme il s'agit d'un commutateur de ligne de commande, je m'attendrais à ce qu'il désigne également les répertoires, car dans unix / lnux, tout est un fichier, également un répertoire. (L'autre interprétation est bien sûr également valable, mais cela n'a aucun sens de conserver les répertoires dans un tel cas. Je considérerais cela comme un comportement inattendu et déroutant.)
Mais j'ai trouvé que dans gnu tar sur certaines distributions, gnu tar supprime en fait l'arborescence des répertoires. Une autre indication que garder l'arbre était un bug. Ou au moins une solution de contournement jusqu'à ce qu'ils le corrigent.
Voici ce que j'ai essayé sur une console Ubuntu 10.04:
Si vous voulez le voir sur votre machine, collez-le dans une console à vos risques et périls:
la source