Désolé, j'ai oublié de mentionner que ces répertoires peuvent contenir des fichiers. Je n'ai pas pu supprimer certains d'entre eux à cause de l'erreur "find: can't delete` ./start ': Directory not empty "
garbage collection
@garbagecollection J'ai ajouté une mise à jour.
jaypal singh
3
vous pouvez utiliser +au lieu de \;passer plusieurs répertoires à la fois.
jfs
Merci @JFSebastian Bon point. Je vais l'ajouter à la réponse.
Comme le souligne une autre réponse, vous pouvez essayer de trouver tous les répertoires portant le nom testet les supprimer
find -name "test" -type d -delete
J'ai rencontré des problèmes de compatibilité croisée sur Mac, j'ai donc utilisé cette commande équivalente:
find -path "*/test" -type d -delete
-path : recherche un modèle dans le nom de fichier complet.
Dans les deux cas cependant, si l'un des répertoires nommés testcontient des fichiers, il findse plaindra de cela Directory is not emptyet ne supprimera pas le répertoire.
Si vous aviez l'intention de supprimer tous les fichiers, y compris le testrépertoire, nous pouvons utiliser la même astuce pour supprimer tous les fichiers dans les répertoires nommés en testpremier.
find -path "*/test/*" -delete
Le modèle "*/test/*":, garantira que nous ne supprimons que les fichiers dans un répertoire nommé /test/. Une fois les répertoires vides, nous pouvons continuer et supprimer les répertoires à l'aide de la première commande:
find -path "*/test" -type d -delete
Exemple:
$ tree
.
├── mytest
│ └── test
│ └── blah.txt
├── test
│ ├── bar.jpg
│ └── dir
│ └── bar.bak
└── testdir
└── baz.c
5 directories, 4 files
$ find -path "*/test" -type d -delete
$ tree
.
├── mytest
│ └── test
├── test
└── testdir
└── baz.c
4 directories, 1 file
$ find -name "test" -type d -delete
$ tree
.
├── mytest
└── testdir
└── baz.c
2 directories, 1 file
+
recherche in. Je n'en avais aucune idée, j'aurais vraiment souhaité l'avoir su il y a longtemps.xargs
commande a bien fonctionné.-name: recherche le nom passé. Vous pouvez utiliser
-regex
pour fournir des noms basés sur des expressions régulières-type: recherche les types de fichiers.
d
recherche uniquement les répertoires-delete: action qui supprime la liste trouvée.
Alternativement:
Comme JF Sebastian l'a déclaré dans les commentaires:
Vous pouvez utiliser
+
au lieu de\;
pour passer plusieurs répertoires à la fois.la source
+
au lieu de\;
passer plusieurs répertoires à la fois.encore une autre façon de le faire est
Un lien utile sur find: http://www.softpanorama.info/Tools/Find/using_exec_option_and_xargs_in_find.shtml
la source
Vous pouvez également utiliser l'option -exec
la source
En supposant que bash 4+
La barre oblique de fin signifie qu'elle ne correspondra qu'aux répertoires. Le test est préalable avec:
la source
Supposons que vous utilisez gnu find , vous pouvez utiliser l'option -delete:
find . -name test -delete
ce qui est plus facile à retenir.
la source
Comme le souligne une autre réponse, vous pouvez essayer de trouver tous les répertoires portant le nom
test
et les supprimerJ'ai rencontré des problèmes de compatibilité croisée sur Mac, j'ai donc utilisé cette commande équivalente:
Dans les deux cas cependant, si l'un des répertoires nommés
test
contient des fichiers, ilfind
se plaindra de celaDirectory is not empty
et ne supprimera pas le répertoire.Si vous aviez l'intention de supprimer tous les fichiers, y compris le
test
répertoire, nous pouvons utiliser la même astuce pour supprimer tous les fichiers dans les répertoires nommés entest
premier.Le modèle
"*/test/*"
:, garantira que nous ne supprimons que les fichiers dans un répertoire nommé/test/
. Une fois les répertoires vides, nous pouvons continuer et supprimer les répertoires à l'aide de la première commande:Exemple:
la source