1273 Stimmen

Auflistung nur Verzeichnisse mit ls in Bash?

Dieser Befehl listet Verzeichnisse im aktuellen Pfad auf:

ls -d */

Was genau bedeutet das Muster */ tun?

Und wie können wir den absoluten Pfad im obigen Befehl angeben (z. B. ls -d /home/alice/Documents ), um nur Verzeichnisse in diesem Pfad aufzulisten?

2voto

BHG Punkte 21

Einzeiler, um Verzeichnisse nur von "hier" aus aufzulisten.

Mit Dateizählung.

for i in `ls -d */`; do g=`find ./$i -type f -print| wc -l`; echo "Directory $i contains $g files."; done

2voto

Perl verwenden:

ls | perl -nle 'print if -d;'

2voto

inukaze Punkte 291

Ich habe es teilweise damit gelöst:

cd "/path/to/pricipal/folder"

for i in $(ls -d .*/); do sudo ln -s "$PWD"/${i%%/} /home/inukaze/${i%%/}; done

    ln: «/home/inukaze/./.»: can't overwrite a directory
    ln: «/home/inukaze/../..»: can't overwrite a directory
    ln: accesing to «/home/inukaze/.config»: too much symbolics links levels
    ln: accesing to «/home/inukaze/.disruptive»: too much symbolics links levels
    ln: accesing to «/home/inukaze/innovations»: too much symbolics links levels
    ln: accesing to «/home/inukaze/sarl»: too much symbolics links levels
    ln: accesing to «/home/inukaze/.e_old»: too much symbolics links levels
    ln: accesing to «/home/inukaze/.gnome2_private»: too much symbolics links levels
    ln: accesing to «/home/inukaze/.gvfs»: too much symbolics links levels
    ln: accesing to «/home/inukaze/.kde»: too much symbolics links levels
    ln: accesing to «/home/inukaze/.local»: too much symbolics links levels
    ln: accesing to «/home/inukaze/.xVideoServiceThief»: too much symbolics links levels

Nun, das reduziert für mich, den Hauptteil :)

2voto

lacostenycoder Punkte 9711

Hier ist eine Variante mit Baum das die Verzeichnisnamen nur auf separaten Zeilen ausgibt, ja, es ist hässlich, aber hey, es funktioniert.

tree -d | grep -E '^[|]' | cut -d ' ' -f2

oder mit awk

tree -d | grep -E '^[|]' | awk '{print $2}'

Dies ist jedoch wahrscheinlich besser und bewahrt die / nach dem Verzeichnisnamen.

ls -l | awk '/^d/{print $9}'

2voto

Avinash Raut Punkte 1566

Wenn Sie ein Leerzeichen im Ordnernamen haben, funktioniert $9 print nicht, versuchen Sie folgenden Befehl

ls -l yourfolder/alldata/ | grep '^d' | awk '{print $9" " $10}'

Ausgabe

ls -l yourfolder/alldata/ | grep '^d' | awk '{print $9" " $10}'
testing_Data 
Folder 1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X