Comment exclure ce / actuel / dot dossier de trouver de “type d”
find . -type d
peut être utilisé pour trouver tous les répertoires ci-dessous quelques point de départ. Mais il retourne le répertoire courant ( .
), qui peuvent être indésirables. Comment peut-il être exclu?
Vous devez vous connecter pour publier un commentaire.
POSIX 7 solution:
Pour ce cas particulier (
.
), golfs mieux que lemindepth
solution (24 vs 26 caractères), même si c'est probablement un peu plus difficile pour type en raison de la!
.Pour exclure d'autres répertoires, cela va de golf moins bien et requiert une variable pour la Sécheresse:
Mon arbre de décision entre
!
et-mindepth
:!
pour la portabilité..
? Jetez une pièce de monnaie.long_name
? Utilisation-mindepth
.find /path/ ! -path "/path/first" ! -path "/path/second"
est-ce la seule?find / ! -regex '/\(a\|b\)/.*'
ou, plus simplement, conduite par grep. Pour ne pas répéter, le ci-dessus serait très inefficace et vous devez utiliser-prune
: stackoverflow.com/questions/1489277/...find
avecgrep
à exclure le répertoire, mais le répertoire parent était toujours là, causant tout pour être supprimé de toute façon.find
, vous devez vérifier pour les préfixes: stackoverflow.com/questions/17959317/... Mais un Bash pour la boucle peut s'en occuper 🙂\!
) pour être sur le côté sécuritaire. Tous les exemples dans ma machineman find
avoir échappé de sorte qu'il semble que c'est probablement une Bonne Idée™. Modifier — Simplement remarqué qu'il a même dit explicitement:! expr True if expr is false. This character will also usually need protection from interpretation by the shell.
man bash
dit:! Start a history substitution, except when followed by a blank, newline, carriage return, =
. Sinon, nous ne pouvions pas écrire des choses commeif ! true
.!
, mais ne pouvait pas trouver quelque chose qui permettrait d'élargir dans ce cas: pubs.opengroup.org/onlinepubs/9699919799/utilities/... je pense que l'histoire de l'expansion n'y existent pas. Il est peut-être mieux laisser en l'état? Peut-être un fou de la non-conformité de la mise en œuvre serait de lui donner un autre sens quand il s'est échappé? (mais oui, Bash est de la non-conforme déjà pour faire de l'histoire des expansions?)find
de mise en œuvre de nom et de la version. Je viens de testé sur Ubuntu 16.04, GNU findutils 4.7.0.Non seulement la profondeur de récursivité de
find
peut être contrôlé par la-maxdepth
paramètre, la profondeur peut également être limité de “haut” à l'aide de l'correspondant-mindepth
paramètre. Donc ce qu'on a réellement besoin est:find . -mindepth 1 -maxdepth 1 -type d ...
- Je utiliser
find ./* <...>
lorsque je n'ai pas l'esprit ignorant de premier niveau des fichiers de configuration utilisateur (le*
glob ne correspond pas à ces par défaut de bash - voir le "dotglob' option dans le shopt builtin: https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html).-exec
option. Par exemple, si vous essayezfind dir/* -type d -exec rmdir {} \;
, vous verrez des erreurs.rmdir
et sont les plus susceptibles de vous dire que les répertoires ne sont pas vides depuisfind
fera profondeur d'abord de recherche dans les répertoires, montrant les parents devant leurs enfants.Bien, une solution simple ainsi (la solution n'était pas de travail pour moi sur windows git bash)
find * -type d
Il pourrait ne pas être très performant, mais fait le travail, et c'est ce dont nous avons besoin parfois.
[Edit] : Comme @AlexanderMills commenté il ne se montre pas des répertoires cachés dans la racine de l'emplacement (par exemple
./.hidden
), mais il permettra d'afficher les sous-répertoires (par exemple../folder/.hiddenSub
). [Testé avec git bash sur windows]