ls-kommandot i Linux används för att lista innehållet i en katalog.
som standard listar det allt Innehåll, vare sig det är en fil eller en katalog eller en länk eller ett namngivet rör.
men vad händer om du bara vill lista katalogerna? Hur gör du det?
precis som allt i Linux finns det flera sätt att utföra samma uppgift. Att bara lista katalogerna är inte annorlunda:
- ls-d * /
- ls – l / grep ’^d ’
- hitta . – maxdjup 1-typ d
- eko * /
- träd-D-L 1
oroa dig inte. Jag ska förklara saker i detalj. Här är innehållet I katalogen jag ska använda i exemplen här:
använd ls-kommandot för att bara lista kataloger
det är alltid bra att göra det med det välbekanta ls-kommandot eftersom det här är kommandot du använder för att visa innehållet i en katalog.
för att bara lista underkatalogerna, använd alternativet -d
med ls-kommandot så här:
ls -d */
här är utgången den visar:
Documents]$ ls -d */another_dir/ my_dir/
varför */
? För utan det kommer ls -d
bara att returnera katalognamnet. Alternativet -d
listar kataloger inte dess innehåll (som inkluderar fil, kataloger etc).
*/
är ett mönster. Med *
listar du allt innehåll (inklusive innehållet i underkatalogerna) och /
begränsar mönstret till kataloger.
den här bilden visar skillnaden ganska bra.
du kan kombinera det med lång lista alternativ -l
och de flesta andra alternativ:
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/
om du inte vill ha det efterföljande snedstrecket ( / ) i slutet av katalognamnen kan du använda kommandot klipp ut för att klippa ut det:
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
lista endast underkataloger i en specifik katalog
ovanstående kommando fungerar i den aktuella katalogen. Vad händer om du inte är i samma katalog?
i den här situationen kan du använda */
i slutet av sökvägen till katalogen med ls -d
:
ls -d Path/To/Dir/*/
här är ett exempel där jag flyttar ut ur Dokumentkatalogen och sedan listar bara katalogerna 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/
märkte du att den inte listar den dolda katalogen? Det är en brist på denna metod. Du kan använda ls -d .*/
för att visa dolda kataloger, men det visar bara dolda kataloger.
använd kombination av LS och grep kommando
du kan alltid lita på den gamla goda grep kommando för att filtrera utdata för specifikt innehåll.
om du länge listar innehållet kan du identifiera katalogerna eftersom börja med d
.
du kan använda grep för att filtrera innehållet som börjar med d:
ls -l | grep '^d'
men detta ger dig mycket fler fält än bara katalognamnen:
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
använd kommandot Sök för att lista endast kataloger
så här använder du kommandot Sök för att lista endast underkatalogerna:
find directory_path -maxdepth 1 -type d
jag hoppas att du är bekant med find-kommandot. Jag förklarar det ändå.
med type d
ber du kommandot Sök att bara leta efter kataloger.
med maxdepth 1
frågar du kommandot Sök för att bara hålla sökningen på den aktuella nivån (och inte gå in i underkatalogerna).
Documents]$ find . -maxdepth 1 -type d../my_dir./another_dir./.my_hidden_dir
som du kan se i utmatningen ovan visar den också den dolda katalogen.
använd trädkommando för att lista endast kataloger
om ditt mål är att bara lista katalogerna kan du också använda kommandot träd.
som standard ger kommandot träd dig hela katalogstrukturen. Du kan ändra den för att visa endast kataloger och endast på den aktuella nivån.
tree -dai -L 1
- d-leta efter endast kataloger
- a-leta efter dolda filer och kataloger också
- i-Ta bort trädstrukturen från displayen
- l 1-Gå inte in i underkatalogerna
här är utmatningen:
Documents]$ tree -dai -L 1.another_dirmy_dir.my_hidden_dir3 directories
använda echo-kommandot för att lista kataloger
den osannolika kandidaten? Du kommer bli förvånad över att veta att echo command I Linux också kan användas för att visa innehållet i en katalog. Försök använda echo *
och se själv.
i likhet med kommandot ls kan du också använda mönstret */
för att bara lista katalogerna i den aktuella arbetskatalogen.
echo */
här är utmatningen som är identisk med vad du har med kommandot ls -d
:
det kan finnas fler sätt att bara lista katalogerna, inte filerna. Faktum är att de metoder som diskuteras här kan ha några ifs och buts baserat på vad du letar efter.
om ditt mål är att bara visa katalogerna, skulle de flesta kommandon jag diskuterade fungera. Om du vill ha något mer specifikt som att bara få katalognamnet med snedstreck etc, måste du göra lite formatering på egen hand.
jag hoppas att du hittar det här Linux-tipset till hjälp. Frågor och förslag är alltid välkomna.