Perché questo carattere jolly non funziona come mi aspetto?


11

Nella mia cartella utente, ho cartelle come D ropbox, D ocuments, D ownloads & d ump.

ls a*dovrebbe elencare tutti i file il cui nome inizia con a. Giusto? Ma quando do il comando ls d*, invece di visualizzarlo dumpmi mostra la ls della directory di dump. E quando ls D*do il comando as , allora visualizza ls di tutte le pieghe che iniziano con D

Quindi quale parte mi mancava nel capirlo?

Modifica: allegare uno screenshot Lo screenshot

Risposte:


17

Secondo la pagina man di bash:

bash esegue la scansione di ogni parola per i caratteri *,? e [. Se viene visualizzato uno di questi caratteri, la parola viene considerata come un motivo e sostituita con un elenco in ordine alfabetico di nomi di file corrispondenti al motivo

e dal nodo informativo per ls

Il programma `ls 'elenca informazioni sui file (di qualsiasi tipo, comprese le directory). Le opzioni e gli argomenti dei file possono essere mescolati arbitrariamente, come al solito.

Per argomenti della riga di comando non opzionali che sono directory, per impostazione predefinita 'ls' elenca il contenuto delle directory, non ricorsivamente, e omette i file con nomi che iniziano con '.'. Per altri argomenti non opzionali, per impostazione predefinita `ls 'elenca solo il nome del file. Se non viene specificato alcun argomento non di opzione, 'ls' elenca il contenuto della directory corrente.

quindi quando dai ls d*, d * viene espanso in un elenco ordinato di tutti i nomi di file / directory che iniziano con d. Quindi il tuo comando diventa

ls dump

e poiché dump è un nome di directory in modo da ottenere l'elenco di tutti i file nella directory "dump" ma quando lo dai ls D*, D * viene espanso in " Dropbox di download di documenti desktop ", quindi il comando diventa

ls Desktop Documents Downloads Dropbox

e poiché tutte queste sono directory, ottieni l'elenco dei file nella singola directory. Se ci fosse un file che inizia con D nella directory corrente, sarebbe stato elencato separatamente.


2
Un'aggiunta minore: quando viene fornita più di una directory come argomento, ls visualizza il nome di ciascuna directory prima di elencarne il contenuto. Non lo farà per una singola directory.
Marcel Stimberg,

Grazie! Ciò ha chiarito il mio dubbio. Ho fatto un ls p*ed ha mostrato un file perché esiste e una ls P*mostra l' Pictures pubblica cartella come non v'è alcun file che inizia con P . E quando ho creato una directory chiamata cacca , si presentò sulls p*
Ashfame

7

Sia d * che D * elencano sia i file che le cartelle corrispondenti rispettivamente a d * e D *, il comportamento è lo stesso, ci deve essere stato un errore nel test.

Se vuoi elencare solo i nomi delle cartelle e non i contenuti della cartella devi usare "-d":

ls -d D*

Ho allegato uno screenshot, per favore dai un'occhiata
Ashfame,

0

Come suggerito sopra, l' -dopzione è la strada da percorrere. Aggiunta

alias ld='ls -d'

al mio ~/.bashrcfile funziona bene per me.


3
Con questo alias, si blocca un facile accesso a ld - The GNU linker, che impedirà all'OP di compilare e collegare i programmi. Usa alias lsd='ls -d'invece. Prima di aliasare qualcosa come foosempre fai type fooper vedere se fooè già usato come nome per qualcosa e decidi se la convenienza foo
dell'alias
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.