Si vous avez extrait les fichiers de telle sorte que l'horodatage de modification de l'archive ne soit pas conservé dans les copies extraites (mais que les fichiers extraits aient leur heure de modification habituelle), le bon moyen de l'attaquer est via l'heure de modification. Tous les fichiers extraits ont un horodatage de modification plus récent que le fichier existant le plus récemment modifié de ce répertoire.
Voici une situation simple.
Supposons qu'aucun des fichiers existants du répertoire en cours n'a été touché pendant au moins 24 heures. Tout ce qui a été modifié au cours des dernières 24 heures est donc indésirable à partir du fichier zip.
$ find . -mtime -1 -print0 | xargs -0 rm
Cela trouvera aussi certains répertoires, mais rm
les laissera seuls. Ils peuvent être traités dans un second passage:
$ find . -mtime 1 -type d -print 0 | xargs -0 rmdir
Tous les répertoires récemment modifiés ont été modifiés par le zip. Si vous rmdir
les supprimez avec succès, cela signifie qu'ils sont vides. Les répertoires vides qui ont été touchés par zip ont probablement été créés par celui-ci: c’est-à-dire issus de l’archive. Nous ne pouvons pas être sûrs à 100%. Il est possible que le travail de décompression mette certains fichiers dans un répertoire existant qui était vide.
Si find
la granularité sur 24 heures ne convient pas au travail, car les fichiers de l’arborescence ont été modifiés trop récemment, je considérerai ensuite quelque chose de simple: supposons que le travail de décompression n’a placé aucun élément dans les sous-répertoires existants. C'est-à-dire que tout ce qui a été décompressé est soit un fichier au niveau supérieur, soit un nouveau sous-répertoire qui n'existait pas auparavant, qui ne contient donc que du matériel provenant du zip. Ensuite:
# list directory in descending order of modification time
$ ls -1t > filelist # descending order of modification time
Nous ouvrons maintenant filelist
un éditeur de texte et déterminons la première entrée de la liste qui ne provient pas du zip. Nous supprimons cette entrée et tout le reste après. Il ne reste que les fichiers et répertoires issus du zip. Premièrement, nous inspectons visuellement des problèmes tels que des espaces dans les noms et des occurrences de citations à échapper. Nous pouvons ensuite ajouter des guillemets autour de tout, si nécessaire: Ce qui suit suppose que vous utilisez Vim:
:%s/.*/"&"/
Puis joignez le tout dans une grande ligne:
:%j
Insérez maintenant rm -rf
devant:
Irm - rf<ESC>
Exécutez la ligne sous le curseur en tant que commande shell:
!!sh<Enter>
Je ne voudrais certainement pas automatiser les étapes de cette tâche, en raison du risque d'effacer des fichiers déjà présents ou de foirer en raison de problèmes de nom de fichier.
Si vous souhaitez obtenir une liste des chemins dans le fichier zip, capturez-le dans un fichier, examinez-le très attentivement et transformez-le en suppression après avoir effectué les modifications nécessaires.
lq
optionsunzizp
, j'ai juste ajouté quelques astuces classiques * nix autour de sa réponse principale.