50 votes

Supprimer tous les fichiers d'un répertoire, à l'exception de ceux portant l'extension pdf

J'ai un répertoire qui contient les éléments suivants :

x.pdf
y.zip
z.mp3
a.pdf

Je souhaite supprimer tous les fichiers à l'exception de x.pdf y a.pdf . Comment faire cela à partir du terminal ? Il n'y a pas de sous-répertoire, donc pas besoin de récursivité.

1voto

Sergiy Kolodyazhnyy Points 97292

portable Shell façon

$ ksh -c 'for i in ./*; do case $i in *.pdf)continue;; *)rm "$i";; esac;done'

Pratiquement POSIX et compatible avec n'importe quel Shell de style Bourne ( ksh , bash , dash ). Bien adapté pour les scripts portables et lorsque vous ne pouvez pas utiliser bash de Shell.

perl :

$ perl -le 'opendir(my $d,"."); foreach my $f (grep(-f && !/.pdf/ , readdir($d))){unlink $f};closedir $d'                                                             

Ou légèrement plus propre :

$ perl -le 'opendir(my $d,"."); map{ unlink $_ } grep(-f "./$_" && !/.pdf/ , readdir($d));closedir $d'

alternative Python

python -c 'import os;map(lambda x: os.remove(x), filter(lambda x: not x.endswith(".pdf"),os.listdir(".")))'

0voto

KeitelDOG Points 101

Attention à ce que vous supprimez !

Un moyen sûr de le tester avant d'essayer de le supprimer est de le faire d'abord avec ls car certains comportements non détectés pourraient supprimer des fichiers non désirés. Et vous pouvez le faire directement en dehors du répertoire. ls est similaire à rm , donc :

ls sub/path/to/files/!(*.pdf)

La liste suivante s'affiche

y.zip
z.mp3

Désormais, vous pouvez voir ce que vous supprimez et le faire en toute sécurité :

rm sub/path/to/files/!(*.pdf)

Et c'est tout. Vous pouvez utiliser des caractères génériques * d'être plus sélectif en ne conservant que les documents des cours de programmation :

rm sub/path/to/files/!(*programming*)

0voto

xyonme Points 1

Cette solution fonctionne dans la plupart des cas.

J'ai des centaines de répertoires mais j'ai des exceptions pour certains fichiers de ces répertoires.

  1. Zipper tous les fichiers qui ne sont pas à supprimer vers my_files.zip . S'il y a des répertoires, vous devez ajouter la commande récursive.

    zip -r my_files.zip a.php b.txt c.dll directory1 directory2
  2. Supprimer tous les fichiers de manière récursive (en profondeur) sauf myfiles.zip

    #extended globbing allows for more advanced pattern matching.
    shopt -s extglob
    
    #delete all file
    rm -r -- !(my_files.zip)
  3. Décompressez le fichier my_files.zip

    unzip my_files.zip

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X