Je veux lister uniquement les répertoires dans le chemin spécifié ( ls
n'a pas une telle option). En outre, cela peut-il être fait avec une seule commande de ligne?
Je veux lister uniquement les répertoires dans le chemin spécifié ( ls
n'a pas une telle option). En outre, cela peut-il être fait avec une seule commande de ligne?
Réponses:
Essayez ceci ls -d */
pour lister les répertoires dans le répertoire courant
ls -al | grep '^d'
- c'est beaucoup plus succinct.
*/
force l'affichage uniquement des éléments se terminant par une barre oblique, qui dans ce cas serait un répertoire, même si l' -F
option de ls
n'est pas utilisée. Similaire au comportement ls *php
et à la façon dont il affiche tous les fichiers se terminant par php
dans un répertoire.
echo */
la même chose aussi
Essaye ça:
find . -maxdepth 1 -type d
ls
solutions suggérées , il find
est seul responsable de faire le travail (ne pas compter sur l'expansion des caractères génériques du shell, qui peut imposer des limites). C'est aussi beaucoup plus concis.
find * -maxdepth 0 -type d
.
find
ne fait généralement que produire les dossiers en profondeur 1.
Le suivant
find * -maxdepth 0 -type d
filtre essentiellement l'expansion de '*', c'est-à-dire toutes les entrées du répertoire courant, par la -type d
condition.
L'avantage est que la sortie est identique à ls -1 *
, mais seulement avec les répertoires et les entrées ne commencent pas par un point
Vous pouvez utiliser ls -d */
outree -d
Une autre solution serait la globalisation mais cela dépend du shell que vous utilisez et si la globalisation des répertoires est prise en charge.
Par exemple ZSH:
zsh # ls *(/)
tree
?
tree
n'est pas installée par défaut (bien qu'elle soit dans les référentiels).
tree
commande n'est pas une commande native unix (veuillez me corriger si je me trompe).
Puisqu'il existe des dizaines de façons de le faire, voici une autre:
tree -d -L 1 -i --noreport
tree -d -L 1 -i --noreport | tail -n +2
tree -C -d -L 1 -i --noreport | tail -n+2
ls -l | grep '^d'
Vous pouvez créer un alias et le placer dans le fichier de profil
alias ld="ls -l| grep '^d'"
find . -maxdepth 1 -type d -name [^\.]\* | sed 's:^\./::'
utilisez ceci pour obtenir une liste de répertoires
ls -d */ | sed -e "s/\///g"
find specifiedpath -type d
Si vous ne voulez pas récuser dans les sous-répertoires, vous pouvez le faire à la place:
find specifiedpath -type d -mindepth 1 -maxdepth 1
Notez que les répertoires "dot" (dont le nom commence par .
) seront également répertoriés; mais pas les répertoires spéciaux .
non plus ..
. Si vous ne voulez pas de répertoires "dot", vous pouvez simplement grep
les sortir:
find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v '^\.'
mindepth
de se débarrasser de .
! 😁
La réponse dépendra 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 approche alternative serait d'utiliser find(1)
, qui devrait fonctionner sur la plupart des versions Unix:
find . -maxdepth 1 -type d -print
find(1)
a de nombreuses utilisations, donc je recommanderais certainement man find
.
Vous pouvez utiliser la tree
commande avec son d
commutateur pour accomplir cela.
% tree -d tstdir
tstdir
|-- d1
| `-- d11
| `-- d111
`-- d2
`-- d21
`-- d211
6 directories
voir man tree
pour plus d'informations.
tree
. Eh bien, mon intention n'était pas de voler le tonnerre.
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
Le répertoire conf_nagios est manquant.
Cela a fonctionné pour moi:
`ls -F | grep /`
(Mais je passe echo */
comme mentionné par @nos)
Voici une autre solution qui affiche les répertoires liés. Je le préfère légèrement car c'est un sous-ensemble de la sortie ls -l "normale":
ls -1d */ | rev | cut -c2- | rev | xargs ls -ld --color=always
En bash:
ls -d */
Liste tous les répertoires
ls -ld */
listera tous les répertoires sous forme longue
ls -ld */ .*/
listera tous les répertoires, y compris les répertoires cachés, sous une forme longue.
Je suis récemment passé à zsh (MacOS Catalina) et j'ai constaté que:
ls -ld */ .*/
ne fonctionne plus si le répertoire courant ne contient aucun répertoire caché.
zsh: no matches found: .*/
Il imprimera l'erreur ci-dessus, mais échouera également à imprimer les répertoires.
ls -ld *(/) .*(/)
Échoue également de la même manière.
Jusqu'à présent, j'ai constaté que ceci:
ls -ld */;ls -ld .*/
est une solution de contournement décente. L' ;
est un séparateur de commande. Mais cela signifie que s'il n'y a pas de répertoires masqués, il répertorie les répertoires et affiche toujours l'erreur pour aucun répertoire masqué:
foo
bar
zsh: no matches found: .*/
ls
est la commande shell pour le contenu de la liste de répertoire en cours
-l
est le drapeau pour indiquer que vous voulez à la liste à Longford (un élément par ligne + un tas d'autres informations cool)
-d
est le drapeau à la liste tous les répertoires « sous forme de fichiers » et non récursive
*/
est l'argument 'lister tous les fichiers se terminant par une barre oblique'
*
est une simple commande regex pour "n'importe quoi", donc */
demande au shell de lister "tout ce qui se termine par '/'"
Voir man ls
pour plus d'informations.
Je mets ceci:
alias lad="ls -ld */;ls -ld .*/"
dans mon .zshrc, et cela semble bien fonctionner.
REMARQUE: j'ai également découvert que
ls -ld .*/ 2> /dev/null
ne fonctionne pas, car il imprime toujours sterr sur le terminal. Je mettrai à jour ma réponse si / quand je trouve une solution.
Liste longue des répertoires
Liste des répertoires
- ls -d * /