Je sais comment supprimer tous les fichiers txt
dans le répertoire actuel par rm *.txt
. Est-ce que quelqu'un sait comment supprimer tous les fichiers du répertoire courant SAUF txt
fichier?
Vous pouvez utiliser find
:
find . -type f ! -name '*.txt' -delete
Ou les fonctionnalités de globbing étendues de bash:
shopt -s extglob
rm *.!(txt)
Ou en zsh:
setopt extendedglob
rm *~*.txt(.)
# || ^^^ Only plain files
# ||^^^^^ files ending in ".txt"
# | \Except
# \Everything
Si vous souhaitez simplement supprimer tous les fichiers sauf '* .txt', vous pouvez utiliser la commande suivante:
$ find . -type f ! -name "*.txt" -exec rm -rf {} \;
mais si vous souhaitez également supprimer répertoires avec les fichiers, vous pouvez utiliser ceci:
$ find . ! -name "*.txt" -exec rm -r {} \;
il y a plusieurs façons de le faire. mais le moyen le plus simple serait (bash):
shopt -s extglob
rm !(*.txt)
Une solution sans find
:
mv dir/*.txt otherdir/
rm -r dir
mv otherdir dir
Cela devrait fonctionner sur toutes sortes de coques.
Vous pouvez utiliser grep inversé et xargs
ls | grep -v .txt$| xargs rm
Faites simplement:
rm $(ls -I "*.txt" )
# Supprime le type de fichier sauf * .txt
De même, si vous avez besoin de supprimer "sauf un ou plusieurs types de fichiers", procédez comme suit:
rm $(ls -I "*.txt" -I "*.pdf" )
#Types de fichiers supprimés sauf * .txt & * .pdf
Cela fonctionne également pour supprimer tous les fichiers et dossiers cachés (point) à l'exception de ceux indiqués (.mydir
):
rm -rf $(ls -aI ".mydir")