Avec bash
le shell globing étendu, vous pouvez supprimer tous les fichiers avec des extensions autres que l’ .pdf
utilisation 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 rm
commande, 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' nullglob
option shell, qui a toutefois son propre problème. Pour une discussion plus approfondie, voir NullGlob - Wiki de Greg
.
signifie "et"?!
signifie "sauf"-name
signifie que vous voulez exclure par un paramètre de nom et que-delete
l'action est-elle à entreprendre lors de la recherche? Donc, il recherche tout sauf "* .pdf" et les supprime? Ou ai-je mal compris?