ls-kommandoen i Linux brukes til å oppgi innholdet i en hvilken som helst katalog.
som standard viser den alt innholdet, det være seg en fil eller en katalog eller en lenke eller et navngitt rør.
men hva om du bare vil liste katalogene? Hvordan gjør du det?
Som alt i Linux, er det flere måter å oppnå samme oppgave på. Oppføring bare katalogene er ikke annerledes:
- ls-d */
- ls-l | grep ‘^d’
- finne . -maxdepth 1-type d
- ekko */
- tre-d-L 1
Slapp av. Jeg skal forklare ting i detalj. Her er innholdet I katalogen jeg skal bruke i eksemplene her:
Bruk ls-kommandoen til å bare liste kataloger
Det er alltid godt å gjøre det med den kjente ls-kommandoen fordi dette er kommandoen du bruker for å vise innholdet i en katalog.
for å liste bare underkatalogene, bruk alternativet -d
med ls-kommandoen som dette:
ls -d */
Her er utgangen det viser:
Documents]$ ls -d */another_dir/ my_dir/
Hvorfor */
? Fordi uten det vil ls -d
bare returnere katalognavnet. -d
alternativliste kataloger ikke innholdet (som inkluderer fil, kataloger etc).
*/
er et mønster. Med *
lister du alt innholdet (inkludert innholdet i underkatalogene) og /
begrenser mønsteret til kataloger.
dette bildet viser forskjellen ganske bra.
du kan kombinere det med lang liste alternativ -l
og de fleste andre alternativer:
Documents]$ ls -ld */drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dir/drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir/
hvis du ikke vil ha skråstrek ( / ) på slutten av katalognavnene, kan du bruke cut-kommandoen til å kutte den ut:
Documents]$ ls -ld */ | cut -f1 -d'/'drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dirdrwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir
Liste bare underkataloger i en bestemt katalog
kommandoen ovenfor fungerer i gjeldende katalog. Hva om du ikke er i samme katalog?
i denne situasjonen kan du bruke */
på slutten av banen til katalogen med ls -d
:
ls -d Path/To/Dir/*/
her er et eksempel der jeg flytter ut Av Dokumentkatalogen og bare viser katalogene i Dokumentkatalogen:
~]$ ls -ld Documents/*/drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 Documents/another_dir/drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 Documents/my_dir/
La du merke til at den ikke viser den skjulte katalogen? Det er en mangel på denne metoden. Du kan bruke ls -d .*/
for å vise skjulte kataloger, men det viser bare skjulte kataloger.
Bruk kombinasjon av ls og grep kommandoen
Du kan alltid stole på den gode gamle grep kommandoen for å filtrere utdataene for spesifikt innhold.
hvis du lang liste innholdet, kan du identifisere katalogene fordi start med d
.
du kan bruke grep til å filtrere innholdet som starter med d:
ls -l | grep '^d'
Men dette gir deg mange flere felt enn bare katalognavnene:
Documents]$ ls -l | grep '^d'drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dirdrwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir
Bruk finn-kommandoen til å liste bare kataloger
slik bruker du finn-kommandoen til å liste bare underkatalogene:
find directory_path -maxdepth 1 -type d
jeg håper du er kjent med find-kommandoen. Jeg skal forklare det likevel.
Med type d
spør du finn-kommandoen for å bare lete etter kataloger.
Med maxdepth 1
spør du finn-kommandoen for å holde søket på det nåværende nivået bare(og ikke gå inn i underkatalogene).
Documents]$ find . -maxdepth 1 -type d../my_dir./another_dir./.my_hidden_dir
som du kan se i utgangen ovenfor, viser den også den skjulte katalogen.
Bruk tre-kommandoen til å liste bare kataloger
hvis målet ditt er å liste bare katalogene, kan du også bruke tre-kommandoen.
som standard gir kommandoen tre deg den komplette katalogstrukturen. Du kan endre den til å vise bare kataloger og bare på dagens nivå.
tree -dai -L 1
- d-se etter kataloger bare
- a-se etter skjulte filer og kataloger også
- i-fjern trestrukturen fra skjermen
- L 1 – ikke gå inn i underkatalogene
her er utgangen:
Documents]$ tree -dai -L 1.another_dirmy_dir.my_hidden_dir3 directories
Bruke echo kommando for notering kataloger
usannsynlig kandidat? Du vil bli overrasket over å vite at echo command I Linux også kan brukes til å vise innholdet i en katalog. Prøv echo *
og se selv.
I Likhet med ls-kommandoen, kan du også bruke mønsteret */
til å liste bare katalogene i gjeldende arbeidskatalog.
echo */
her er utgangen som er identisk med det du fikk med kommandoen ls -d
:
Det kan være flere måter å notere bare katalogene, ikke filene. Faktisk kan metodene som diskuteres her ha noen ifs og buts basert på hva du leter etter.
hvis målet ditt er å bare vise katalogene, vil de fleste kommandoene jeg diskuterte fungere. Hvis du vil ha noe mer spesifikt som bare å få katalognavnet med slash etc, må du gjøre litt formatering på egen hånd.
jeg håper du finner Dette Linux-tipset nyttig. Spørsmål og forslag er alltid velkomne.