Il existe de nombreuses situations où l'utilisation d'un fichier *
est pratiquement inévitable, par exemple rm -rf *
dans un dossier contenant des milliers de sous-dossiers et de fichiers.
Mais que faire si vous souhaitez exclure un ou deux fichiers ou dossiers de la rm
commande? J'ai fait une recherche sur Google et n'ai trouvé que des solutions assez compliquées comme find . -depth -not \( -name 'one' -o -name 'two' \
-o -name 'three' \) -exec rm {} \;
indiqué ici .
Y a-t-il une possibilité de le faire plus facilement - sans ce détour find
? Par exemple, rm -rf --exclude='one' --exclude='two' --exclude='three' *
comme dans rsync ou tout simplement rm -rf -e 'one','two','three' *
?
Peut-être même une possibilité générale d'exclure les choses de *
(si d' autres commandes telles que cp
, mv
... ne pas mettre en œuvre leur propre)? Quelque chose comme *{'one','two','three'}
ça?
mv -t /tmp one two three && rm -rf * && mv -t . /tmp/one /tmp/two /tmp/three
, mais je préférerais une solution donnant la possibilité d'exclure explicitement quelque chose de *
. Il y aura sûrement des situations où le déplacement ou la copie des fichiers vers une autre destination ne sera pas une option.
find
avec l'--delete
option (pas besoin d'exécuterrm
pour chaque fichier. C'est une surcharge inutile).