En fait, ce genre de trop demander, je pense.
Mais je veux supprimer tous les fichiers correspondant à l'extension ".sh" (dossier actuel uniquement), ce que je peux faire avec la commande ci-dessous:
find . -maxdepth 1 -type f -name '*.sh' -exec rm {} +
Mais je veux toujours garder le fichier "cron.sh" dans le dossier actuel non affecté.
Comment puis-je y parvenir en ligne de commande unique?
Vous pouvez utiliser -not
:
find . -maxdepth 1 -type f -name '*.sh' -not -name cron.sh -delete
De plus, GNU find
a l'option -delete
qui est plus simple à utiliser et que rm -rf
.
Important: Mettez toujours -delete
à la fin. Comme expliqué dans man find
:
Avertissements: N'oubliez pas que la ligne de commande find est évaluée en tant qu'expression. Par conséquent, si vous mettez -delete en premier, find essayera de supprimer tout ce qui se trouve sous les points de départ que vous avez spécifiés.
Sinon, vous pouvez utiliser une boucle Shell (mais la commande find
ci-dessus est beaucoup plus efficace):
for f in *.sh; do [ "$f" = "cron.sh" ] || rm "$f"; done
Un autre moyen, mais plus lent que le grand exemple find
de terdon consiste à utiliser mv
et rm
commandes chaînées avec et opérateurs.
mv cron.sh cron.sh.safe && rm *.sh && mv cron.sh.safe cron.sh
Cela se plaindra si vous avez des répertoires nommés quelquechose.sh, mais ne les supprimez pas.