Je veux lister uniquement les répertoires dans le chemin spécifié (ls
n'a pas cette option). En outre, cela peut-il être fait avec une commande d'une seule ligne?
Essayez ceci ls -d */
pour lister les répertoires du répertoire courant
Essaye ça:
find . -maxdepth 1 -type d
Le suivant
find * -maxdepth 0 -type d
filtre essentiellement le développement de '*', c'est-à-dire toutes les entrées du répertoire en cours, par la condition -type d
.
L’avantage est que la sortie est identique à ls -1 *
, mais seuls les répertoires et les entrées ne commencent pas par un point.
Vous pouvez utiliser ls -d */
ou tree -d
Une autre solution serait la suppression, mais cela dépend du shell que vous utilisez et de la prise en charge de la suppression de répertoires.
Par exemple ZSH:
zsh # ls *(/)
Comme il existe des dizaines de façons de le faire, en voici un autre:
tree -d -L 1 -i --noreport
ls -l | grep '^d'
Vous pouvez créer un alias et le mettre dans le fichier de profil.
alias ld="ls -l| grep '^d'"
find . -maxdepth 1 -type d -name [^\.]\* | sed 's:^\./::'
Pour lister les répertoires du répertoire de travail actuel, ls -d */
peut être utilisé. Et si vous avez besoin de lister les répertoires cachés, utilisez cette commande ls -d .*/
utilisez ceci pour obtenir une liste de répertoire
ls -d */ | sed -e "s/\///g"
La réponse dépend de votre Shell .
Dans zsh
, par exemple, vous pouvez effectuer les opérations suivantes:
_echo *(/)
_
Et tous les répertoires du répertoire de travail actuel seront affichés.
Voir man zshexpn
pour plus d'informations.
Une autre approche consisterait à utiliser find(1)
, qui devrait fonctionner avec la plupart des versions Unix:
_find . -maxdepth 1 -type d -print
_
find(1)
a de nombreuses utilisations, je recommanderais donc certainement _man find
_.
Vous pouvez utiliser la commande tree
avec son commutateur d
pour accomplir cela.
% tree -d tstdir
tstdir
|-- d1
| `-- d11
| `-- d111
`-- d2
`-- d21
`-- d211
6 directories
voir man tree
pour plus d'informations.
find specifiedpath -type d
Si vous ne voulez pas recurse dans des sous-répertoires, vous pouvez le faire à la place:
find specifiedpath -type d -mindepth 1 -maxdepth 1
Notez que les répertoires "points" (dont le nom commence par .
) seront également listés; mais pas les répertoires spéciaux .
ni ..
. Si vous ne voulez pas de répertoires "points", vous pouvez simplement grep
les sortir:
find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v '^\.'
### If you need full path of dir and list selective dir with "name" of dir(or dir_prefix*):
find $(pwd) -maxdepth 1 -type d -name "SL*"
Si j'ai ce répertoire:
ls -l
lrwxrwxrwx 1 nagios nagios 11 août 2 18:46 conf_nagios -> /etc/icinga
-rw------- 1 nagios nagios 724930 août 15 21:00 dead.letter
-rw-r--r-- 1 nagios nagios 12312 août 23 00:13 icinga.log
-rw-r--r-- 1 nagios nagios 8323 août 23 00:12 icinga.log.gz
drwxr-xr-x 2 nagios nagios 4096 août 23 16:36 tmp
Pour obtenir tous les répertoires, utilisez -L pour résoudre les liens:
ls -lL | grep '^d'
drwxr-xr-x 5 nagios nagios 4096 août 15 21:22 conf_nagios
drwxr-xr-x 2 nagios nagios 4096 août 23 16:41 tmp
sans -L:
ls -l | grep '^d'
drwxr-xr-x 2 nagios nagios 4096 août 23 16:41 tmp
conf_nagios le répertoire est manquant.
Voici une autre solution qui affiche les répertoires liés. Je le préfère légèrement parce que c'est un sous-ensemble de la sortie "normale" de ls -l:
ls -1d */ | rev | cut -c2- | rev | xargs ls -ld --color=always
Cela a fonctionné pour moi:
`ls -F | grep /`
(Mais je passe à echo */
comme mentionné par @nos)