Avec bashle shell globing étendu, vous pouvez supprimer tous les fichiers avec des extensions autres que l’ .pdfutilisation de
rm -- *.!(pdf)
Comme indiqué par @pts, les --caractères indiquent la fin de toutes les options de commande; sécurisez la commande dans le cas très rare de fichiers dont le nom commence par un -caractère.
Si vous souhaitez supprimer des fichiers sans extension ainsi que ceux avec des extensions autres que .pdf, alors, comme l'a souligné @DennisWilliamson, vous pouvez utiliser
rm -- !(*.pdf)
La navigation étendue doit être activée par défaut, mais sinon, vous pouvez le faire en utilisant
shopt -s extglob
Surtout si vous souhaitez utiliser ceci 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), alors par défaut, le glob sera passé non développé au rmcommande, entraînant une erreur comme
rm: cannot remove `*.!(pdf)': No such file or directory
Vous pouvez modifier ce comportement par défaut à l'aide de l' nullgloboption shell, qui a toutefois son propre problème. Pour une discussion plus approfondie, voir NullGlob - Wiki de Greg
.signifie "et"?!signifie "sauf"-namesignifie que vous voulez exclure par un paramètre de nom et que-deletel'action est-elle à entreprendre lors de la recherche? Donc, il recherche tout sauf "* .pdf" et les supprime? Ou ai-je mal compris?