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

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

1
 cp myfile.txt somewhere_else;
 rm -rf *
 cp somewhere_else/myfile.txt .

1
ln myfile.txt .myfile.txt && rm -rf * && mv .myfile.txt myfile.txt


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.