Avec le shell de globalisation étendu de bash
, vous pouvez supprimer tous les fichiers avec des extensions autres que .pdf
en utilisant
rm -- *.!(pdf)
Comme indiqué par @pts, les caractères --
indiquent la fin des options de commande, ce qui rend la commande sûre dans les rares cas où les noms commencent par un caractère -
.
Si vous souhaitez supprimer des fichiers sans extension, ainsi que ceux avec des extensions autres que .pdf
, alors comme le fait remarquer @DennisWilliamson, vous pouvez utiliser
rm -- !(*.pdf)
La globalisation étendue doit être activée par défaut, mais sinon vous pouvez le faire en utilisant
shopt -s extglob
Surtout si vous avez l'intention de l'utiliser dans un script, il est important de noter que si l'expression ne correspond à rien (c'est-à-dire s'il n'y a pas de fichiers non-pdf dans le répertoire), le glob sera transmis par défaut unexpanded à la commande rm
, entraînant une erreur comme
rm: cannot remove '*.!(pdf)': No such file or directory
Vous pouvez modifier ce comportement par défaut en utilisant l’option nullglob
shell, qui a cependant son propre problème. Pour une discussion plus approfondie, voir NullGlob - Wiki de Greg