find . -type d
peut être utilisé pour trouver tous les répertoires en dessous d'un point de départ. Mais il retourne le répertoire courant ( .
) aussi, ce qui peut être indésirable. Comment l'exclure ?
find . -type d
peut être utilisé pour trouver tous les répertoires en dessous d'un point de départ. Mais il retourne le répertoire courant ( .
) aussi, ce qui peut être indésirable. Comment l'exclure ?
Fonctionne sur GNU find, mais malheureusement, il s'agit d'une extension gnu de l'application POSIX 7 find et même la LSB utilise les utilitaires POSIX (et non les utilitaires étendus de GNU).
find . ! -path . -type d
Pour ce cas particulier ( .
), golfe mieux que le mindepth
(24 contre 26 caractères), bien qu'il soit probablement un peu plus difficile à taper en raison de l'utilisation de l'option !
.
Pour exclure d'autres répertoires, cela gérera moins bien et nécessite une variable pour le DRYness :
D="long_name"
find "$D" ! -path "$D" -type d
Mon arbre de décision entre !
y -mindepth
:
!
pour la portabilité..
? Lancez une pièce.long_name
? Utilisez -mindepth
.
Si vous devez exclure plusieurs chemins, faites simplement find /path/ ! -path "/path/first" ! -path "/path/second"
Est-ce le seul moyen ?
Mon problème était le suivant : Je voulais supprimer récursivement tout ce qui se trouvait dans un répertoire, à l'exception d'un sous-répertoire. J'utilisais find
con grep
pour exclure le répertoire mais le répertoire parent était toujours là, entraînant la suppression de tout de toute façon.
@VincentDeSmet je ne vois pas de solution directe avec find
vous devez vérifier les préfixes : stackoverflow.com/questions/17959317/ Mais une boucle for en Bash peut le faire :-)
J'utilise find ./* <...>
lorsque cela ne me dérange pas d'ignorer les dotfiles de premier niveau (les *
glob ne correspond pas à ces éléments par défaut dans bash - voir l'option 'dotglob' dans le buildin shopt : https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html ).
eclipse tmp # find .
.
./screen
./screen/.testfile2
./.X11-unix
./.ICE-unix
./tmux-0
./tmux-0/default
eclipse tmp # find ./\*
./screen
./screen/.testfile2
./tmux-0
./tmux-0/default
Eh bien, une solution de contournement simple également (la solution ne fonctionnait pas pour moi sur Windows git bash)
find * -type d
Il n'est peut-être pas très performant, mais il fait le travail, et c'est ce dont nous avons besoin parfois.
[Edit] : Comme @AlexanderMills l'a commenté, il n'affichera pas les répertoires cachés dans l'emplacement de la racine (ex. ./.hidden
), mais il montrera les sous-répertoires cachés (ex. ./folder/.hiddenSub
). [Testé avec git bash sous Windows].
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.