Comment supprimer tous les fichiers sauf Un sous Unix? [dupliquer]

Réponses:

20
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
Sandro Munda
la source
J'allais faire très similaire en utilisant find, mais le vôtre fonctionne et vous étiez plus rapide. +1
Rory Alsop
2
cela échoue si vous avez des fichiers avec des espaces dans leurs noms.
Mat
Pour gérer les noms de fichiers avec des espaces, on pourrait utiliserls -1 | grep -v do_not_delete | xargs -I files rm "files"
sebhofer
8

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):

rm -rf !(myfile.txt)

Cela utilise une globalisation étendue, vous devez donc l'activer en premier:

shopt -s extglob
Lauren
la source
1
 cp myfile.txt somewhere_else;
 rm -rf *
 cp somewhere_else/myfile.txt .
Rayfleck
la source
1
ln myfile.txt .myfile.txt && rm -rf * && mv .myfile.txt myfile.txt
jlliagre
la source
0

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).

geekosaure
la source