GNU/Linux >> Linux Esercitazione >  >> Linux

Il comando 'ls -d' non visualizza le directory. C'è un modo per fare in modo che "ls" visualizzi solo le directory invece di file e directory?

Le tue aspettative sono basate su DOS Think/Windows Think e sono sbagliate. Su MS-DOS, Windows e in alcuni altri sistemi operativi IBM/Microsoft, l'espansione dei caratteri jolly viene eseguita dal comando stesso e cose come /a opzione al dir comando agiscono come filtri di attributo durante l'espansione dei caratteri jolly. dir espande i caratteri jolly come * , che l'interprete dei comandi gli passa così com'è e se /a viene specificato applica gli opportuni filtri a quanto restituito. (Su alcuni sistemi operativi, gli attributi filter possono essere assegnati alla chiamata di sistema per enumerare una directory e il kernel del sistema operativo, o i suoi driver di filesystem, li applica da solo.)

Su Unix e Linux, l'espansione con caratteri jolly viene eseguita dalla shell e ignora le autorizzazioni. Quando, nella directory principale, fai

ls *

cosa il ls comando stesso riceve dalla shell è (qualcosa come)

ls bin home opt var boot dev tmp etc lost+found root usr

Che cos'è il -d /--directory l'opzione fa è disattiva ciò che accade normalmente dopo . Ciò che normalmente accade dopo è ls esamina a turno ciascuno dei suoi argomenti, vede che sono directory e decide di enumerarne il contenuto. Per gli argomenti che denominano i file, stampa solo le informazioni per il file stesso. Con il -d opzione, le directory sono trattate proprio come i file. Quindi ls stampa le informazioni per ciascuna delle directory passate come argomenti, proprio come farebbe se fossero file.

Quindi -d non è un'opzione "stampa solo directory". In effetti, non solo non esiste tale opzione; non può esserci tale opzione. L'espansione con caratteri jolly viene eseguita dalla shell e (in un file POSIX sh almeno) non c'è modo di dire alla shell di controllare i permessi e i bit del tipo di file quando espande * in un elenco di nomi. Per ottenere un elenco dei soli nomi di directory, è necessario o utilizzare il find comando, come spiegato da ztank1013 , o per usare il trucco che un percorso che termina con una barra implica la voce di directory . , come spiegato da Jin . (Jin Il trucco di finisce con il ls comando che riceve gli argomenti

ls bin/ home/ opt/ var/ boot/ dev/ tmp/ etc/ lost+found/ root/ usr/

perché il pattern */ in effetti corrisponde a nomi di percorso con due componenti, il secondo è vuoto, e quindi non è del tutto facendo ciò che era desiderato. In particolare, tratterà i collegamenti simbolici che puntano a directory come se fossero directory.)

Il comportamento di ls -d senza un * è una semplice estensione di quanto sopra. Bisogna semplicemente sapere un'altra cosa su ls :Quando non riceve argomenti, assume come argomento predefinito . . Ora senza il -d opzione, il comportamento di cui sopra porta al contenuto della directory indicata da . essere enumerato e le informazioni per il suo contenuto visualizzate. Con il -d opzione, la directory . viene trattato proprio come se fosse un file, e le sue informazioni vengono visualizzate, piuttosto che il suo contenuto enumerato.


Puoi usare ls -d */ o ls -d .*/ per le directory nascoste.


Prova questo

 find . -mindepth 1 -maxdepth 1 -type d

per ottenere solo le directory nella tua posizione corrente.


Linux
  1. Trova file e directory su Linux con il comando find

  2. Un modo semplice per nascondere file e directory in Linux

  3. Come ottenere solo l'utente, il pid e il comando eseguito per un processo specifico? (Ubuntu 11.10)

  4. cp solo file, saltando le directory

  5. C'è un modo per modificare l'ID volume di un file .iso dalla riga di comando?

Come utilizzare il comando cp per copiare file e directory

Copia file e crea directory di destinazione allo stesso tempo

Il modo più veloce per contare i file in modo ricorsivo in Linux

Un modo semplice per unire i file con il comando Cat

4 modi per trasferire file e directory su Linux

Comando Stat:Visualizza gli attributi di file e directory