4 votes

Comment puis-je spécifier un motif Shell qui exclut certains fichiers ?

Par exemple, je veux supprimer tous les fichiers d'un répertoire sauf le fichier .tar fichier d'où ils viennent. Je pourrais faire quelque chose comme :

find . -maxdepth 0 | grep -v '.tar$' | xargs rm -f

mais y a-t-il un moyen de le faire en utilisant simplement rm et Shell. ? N'hésitez pas à le préciser en utilisant bash ou d'autres shells couramment disponibles, ou avec des options étendues, si cela ne peut pas être fait avec vanilla sh .

J'ai trouvé une question similaire sur éviter les répertoires et sous-répertoires avec find mais pas avec les motifs Shell.

9voto

jjnguy Points 62123

Vous pouvez le faire avec le globbing étendu.

shopt -s extglob

puis

rm !(file.tar)

Cela fonctionne avec bash 3.2.39 au minimum.

0voto

jammus Points 1796

Essayez peut-être ceci

find . -maxdepth 0 \! -name '*.tar' -exec echo rm -f {} \;

Supprimez l'écho précédant le rm si cela semble correct.

Oui, mais existe-t-il un modèle Shell ?

Je ne pense pas. Du moins pas dans les versions de bash que je connais. D'après les autres réponses, il semble que les nouvelles versions soient plus fonctionnelles.

0voto

Dan Carley Points 24959

Je ne pense pas que ce que vous voulez réaliser soit possible.

Vous pourriez cependant simplifier la commande que vous avez :

find . -maxdepth 0 -not -name '*.tar' -exec rm -f {} +

0voto

Kyle Brandt Points 81077

Edit :

J'ai lu la question trop vite... Mais pour continuer avec mon post de toute façon... :-) Si vous voulez supprimer tous les fichiers mais les fichiers tar récursivement avec zsh :

rm -rf **/^*.tar(.)

Non-récursif :

rm -rf ^*.tar(.)

Le nouveau bash 4.0 et zsh supportent le globbing récursif. Pour l'activer dans bash, utilisez :

shopt -s globstar

Ça marche comme ça :

 rm -rf **/*.tar.gz

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