Je viens de décompresser une archive qui a produit un désordre de fichiers dans mon répertoire bien rangé. Par exemple:
user@comp:~/tidy$ tar xvf myarchive.tar
file1
file2
dir1/
dir1/file1
dir1/subdir1/
dir1/subdir1/file1
dir2/
dir2/file1
...
Je m'attendais à ce que le fichier tar ait été organisé dans un seul dossier (c'est-à-dire myarchive/
), mais ce n'était pas le cas! Maintenant, j'ai quelque 190 fichiers et répertoires qui ont fait un abattage numérique dans ce qui était un répertoire organisé. Ces fichiers non tarés doivent être nettoyés.
Existe-t-il un moyen de «défaire» cela et de supprimer les fichiers et répertoires extraits de cette archive?
Merci pour les excellentes réponses ci-dessous. En résumé , voici ce qui fonctionne avec deux étapes (1) supprimer des fichiers et (2) supprimer une structure de répertoire vide dans l'ordre de conditionnement inverse (pour supprimer d'abord les répertoires externes):
tar tf myarchive.tar | xargs -d'\n' rm
tar tf myarchive.tar | tac | xargs -d'\n' rmdir
Et encore plus sûr, pour prévisualiser une exécution à sec des commandes en ajoutant echo
après xargs
.
xargs
( tac
au lieu de sort -r
simplement des cosmétiques), mais vous acceptez la réponse avec une substitution de processus qui, comme vous l'avez expliqué dans les commentaires, ne vous convenait pas? Veuillez également indiquer le xargs -d'\n'
commutateur dans votre message si vous souhaitez résumer pour les futurs utilisateurs, afin qu'ils ne soient pas mordus par des espaces dans les noms de fichiers.
-d'\n'
jusqu'à présent, et après une analyse plus approfondie, votre réponse est en fait plus proche de ce que j'ai utilisé.
-d'\n'
réside dans le fait que si vous ne dites pas xargs
de diviser les arguments sur de nouvelles lignes (ce que vous nourrissez) mais sur des espaces, alors un fichier avec le le nom folder1/some file
sera lu comme folder1/some
et name
.