Duplication possible:
Comment supprimer tous les fichiers dans un répertoire sauf certains?
Je suis souvent confronté à ce problème. J'ai un ensemble de fichiers dans un dossier et j'aimerais les supprimer tous sauf quelques-uns.
Par exemple: j'ai des fichiers nommés selon la date de création (comme 11-1-11.tar, 10-1-11.tar et ainsi de suite). Maintenant, je voudrais supprimer des fichiers comme 10-1-11, 9-1-11 et ainsi de suite, mais pas d'autres fichiers. En gros, j'aimerais faire respecter ce que tout devrait être supprimé et ce qu'il faut retenir. Comment ferais-je cela?
Si c'est BASH, vous pourriez envisager d'utiliser des globules étendus. Autoriser:
shopt -s extglob
(Mettez cela dans votre .bashrc
si vous le souhaitez, ou allumez-le lorsque vous en avez besoin.)
Et puis, par exemple, pour supprimer tous les fichiers sauf le nom du fichier1 et le nom du fichier2
rm !(filename1|filename2)
Vous pouvez également utiliser des caractères génériques comme * là aussi.
Ou vous pouvez supprimer tous ceux qui correspondent à un motif:
rm +([0-9])-+([0-9])-+([0-9]).tar
Supprimerait tous les fichiers # – # – #. Tar (où les nombres ont un ou plusieurs chiffres).
On ne sait pas si cela répondrait à vos besoins ou pas. Plus de détails ici .
Si le nom du fichier correspond à la date de création du fichier, il peut être plus facile de supprimer des fichiers plus anciens qu'un certain jour.
Ceci est facilement réalisé avec la commande find:
Find / home / john / files -type f -mtime +30 -delete
Cela supprime les fichiers sous /home/john/files
qui ont une date de modification plus longue qu'il y a 30 jours.
Vous pouvez également faire ce que vous voulez avec tmpwatch
http://linux.about.com/library/cmd/blcmdl8_tmpwatch.htm
tmpwatch -m 24 /path/to/dir
Supprimera tous les fichiers dans le répertoire plus d'un jour depuis la dernière utilisation (-m).
Je pense que vous pouvez utiliser plusieurs commandes UNIX dans un seul tuyau et cela résoudra votre problème. L'une des solutions possibles consiste à find | grep | xargs rm -rf
find | grep | xargs rm -rf
find | grep | xargs rm -rf
. Par exemple:
$ find /path/to/directory/tree -type f | grep -v -E -f /path/to/exclude/file | xargs rm -rf
Pour exclure certains fichiers, il suffit de mettre leur nom dans fichier /path/to/exclude/file
. Par exemple:
very_useful_file.tar.gz very_important_file.jpg
Pour éviter l'effacement incorrect de fichiers importants, je suggère de créer une copie de sauvegarde de tous les fichiers. Il est également utile d'utiliser xargs avec l'option -p
, qui ...Prompt the user about whether to run each command line and read a line from the terminal.
Il est possible d'utiliser l'outil find
sans grep / xargs. Ce sera quelque chose comme ça: find /path/to/tree -type f ! -name "exlude_pattern"
find /path/to/tree -type f ! -name "exlude_pattern"
Avant d'utiliser ces commandes, lisez attentivement les pages de manuel pour find/grep/xargs
! Ils peuvent être très dangereux :).