Pourquoi ce caractère générique ne fonctionne-t-il pas comme je m'y attendais?

11

Sur mon dossier utilisateur, j'ai des dossiers comme D ropbox, D ocuments, D ownloads & d ump.

ls a*devrait répertorier tous les fichiers dont le nom commence par a. Droite? Mais quand je donne la commande ls d*, au lieu de simplement l'afficher, dumpelle me montre le répertoire ls du dump. Et quand je donne la commande as ls D*, alors il affiche ls de tous les plis commençant par D

Alors, quelle partie ai-je manqué pour le comprendre?

Modifier: joindre une capture d'écran capture d'écran ls

Ashfame
la source

Réponses:

17

Selon la page de manuel de bash:

bash recherche dans chaque mot les caractères *,? et [. Si l'un de ces caractères apparaît, le mot est considéré comme un modèle et remplacé par une liste alphabétique de noms de fichiers correspondant au modèle

et du noeud info pour ls

Le programme `ls 'répertorie les informations sur les fichiers (de tout type, y compris les répertoires). Les options et les arguments de fichier peuvent être mélangés arbitrairement, comme d'habitude.

Pour les arguments de ligne de commande sans option qui sont des répertoires, par défaut, «ls» répertorie le contenu des répertoires, de manière non récursive, et en omettant les fichiers dont le nom commence par «.». Pour les autres arguments sans option, par défaut, `ls 'répertorie uniquement le nom du fichier. Si aucun argument sans option n'est spécifié, 'ls' répertorie le contenu du répertoire courant.

donc quand vous donnez ls d*, d * est développé en une liste triée de tous les noms de fichiers / répertoires commençant par d. Donc, votre commande devient

ls dump

et comme dump est un nom de répertoire, vous obtenez la liste de tous les fichiers dans le répertoire "dump" mais lorsque vous donnez ls D*, D * est développé en " Desktop Documents Downloads Dropbox ", donc la commande devient

ls Desktop Documents Downloads Dropbox

et comme ce sont tous des répertoires, vous obtenez la liste des fichiers dans un répertoire individuel. S'il y avait un fichier commençant par D dans le répertoire actuel, il aurait été répertorié séparément.

binW
la source
2
Un ajout mineur: lorsque plusieurs répertoires sont fournis en argument, ls affiche le nom de chaque répertoire avant de répertorier son contenu. Il ne le fera pas pour un seul répertoire.
Marcel Stimberg
Merci! Cela a dissipé mon doute. Je l' ai fait une ls p*et il a montré un dossier parce qu'il existe et un ls P*montre le Photos Public dossier car il n'y a pas de fichier commençant par P . Et quand j'ai créé un répertoire nommé poo , il est apparu lels p*
Ashfame
7

ls d * et D * répertorient les fichiers et dossiers correspondant respectivement à d * et D *, le comportement est le même, il doit y avoir eu une erreur dans votre test.

Si vous souhaitez répertorier uniquement les noms de dossier et non le contenu du dossier, vous devez utiliser "-d":

ls -d D*
João Pinto
la source
J'ai joint une capture d'écran, veuillez jeter un œil
Ashfame
0

Comme suggéré ci-dessus, l' -doption est le chemin à parcourir. Ajouter

alias ld='ls -d'

à mon ~/.bashrcdossier fonctionne bien pour moi.

user3179473
la source
3
Avec cet alias, vous bloquez l'accès facile à ld - The GNU linker, ce qui empêchera l'OP de compiler et de lier des programmes. Utilisez alias lsd='ls -d'plutôt. Avant de créer un alias pour quelque chose, comme footoujours, type foofoofoo
vérifiez