Duplicata possible:
Comment supprimer tous les fichiers d'un répertoire à l'exception de certains?
Comment supprimer tous les fichiers sauf un (ou certains) sous Unix?
Quelque chose comme
rm -rf -ignore myfile.txt *
Duplicata possible:
Comment supprimer tous les fichiers d'un répertoire à l'exception de certains?
Comment supprimer tous les fichiers sauf un (ou certains) sous Unix?
Quelque chose comme
rm -rf -ignore myfile.txt *
Réponses:
ls * | grep -v dont_delete_this_file | xargs rm -rf
Exemple :
mkdir test && cd test
touch test1
touch test2
touch test3
touch test4
touch test5
Pour supprimer tous les fichiers sauf 'test2':
ls * | grep -v test2 | xargs rm -rf
La sortie 'ls' est alors:
test2
ÉDITER:
Merci pour le commentaire. Si le répertoire contient des fichiers avec des espaces:
mkdir test && cd test
touch "test 1"
touch "test 2"
touch "test 3"
touch "test 4"
touch "test 5"
Vous pouvez utiliser (avec bash):
rm !("test 1"|"test 4")
sortie 'ls':
test 1
test 4
ls -1 | grep -v do_not_delete | xargs -I files rm "files"
Cette page donne une variété d'options selon le shell: http://www.unix.com/unix-dummies-questions-answers/51400-how-remove-all-except-one-file.html
Pour une récursivité, rmvous devez effectuer la récursivité avec findet exclure le ou les fichiers que vous souhaitez conserver (ou grep, mais cela peut vous causer des problèmes d'espaces blancs). Pour un glob de shell, les shells modernes ont des modèles glob qui peuvent être utilisés pour exclure des fichiers; cela peut être combiné avec une récursion glob au niveau du shell quand elle est disponible (par exemple, zsha rm **/*~foo/bar- notez que cela risque de se heurter à des limites de longueur d'argument pour les grandes arborescences de répertoires).