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 *
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"
En supposant que vous utilisez le shell bash (le cas le plus courant), vous pouvez utiliser le symbole de globation de négation (extension du nom de chemin):
Cela utilise une globalisation étendue, vous devez donc l'activer en premier:
la source
la source
la source
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
la source
Pour une récursivité,
rm
vous devez effectuer la récursivité avecfind
et exclure le ou les fichiers que vous souhaitez conserver (ougrep
, 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,zsh
arm **/*~foo/bar
- notez que cela risque de se heurter à des limites de longueur d'argument pour les grandes arborescences de répertoires).la source