So zählen Sie die Anzahl der Ordner in einem bestimmten Verzeichnis. Ich verwende den folgenden Befehl, aber er bietet immer einen zusätzlichen.
find /directory/ -maxdepth 1 -type d -print| wc -l
Wenn ich beispielsweise 3 Ordner habe, enthält dieser Befehl 4. Wenn er 5 Ordner enthält, enthält der Befehl 6. Warum ist das so?
Antworten:
find
druckt auch das Verzeichnis selbst:Sie können stattdessen die untergeordneten Elemente des Verzeichnisses testen und überhaupt nicht in sie absteigen:
Sie können auch verwenden
ls
:quelle
$ ls -l .vim
mit PHP machen? Oder wie man nur die Summe ohne die Liste bekommt. Ich meine, in diesem Fall nur bekommen52
?(ls).Count
ls -l | grep -c ^d
ist ganz einfach und funktioniert. @Pathros gibt es wahrscheinlich einen besseren Weg in PHP, aber im schlimmsten Fall können Sie in PHP immer die Funktion shell_exec () verwenden, um die Befehlszeile auszuführen und Ergebnisse an eine Zeichenfolge zurückzugeben. dh$dirCount = shell_exec('ls -l | grep -c ^d');
Zählen Sie nur die Verzeichnisse im aktuellen Verzeichnis
echo */ | wc
Sie werden wie rauskommen
1 309 4594
2nd digit
repräsentiert nein. von Verzeichnissen.oder
tree -L 1 | tail -1
quelle
zsh: no matches found: */
braucht nullglobecho
. Typwhich echo
echo */ | wc -w
Für find
-mindepth
bedeutet die Gesamtzahl, die in Verzeichnissen wiederverwendet wird-maxdepth
bedeutet Gesamtzahl in Verzeichnissen-type d
bedeutet VerzeichnisUnd für
wc -l
Mittel zählen die Zeilen der Eingabequelle
find . -mindepth 1 -maxdepth 1 -type d | wc -l
Sie erhalten viele Leerzeichen zwischen den Zahlen, zum Beispiel: `2` Sie können dies verhindern, indem Siedir_count=`find . -maxdepth 1 -type d | wc -l | xargs`; echo $dir_count # will print just 2
if (( $dir_count > 1 )); then echo "Yaa"; fi # will print "Yaa"
Wenn Sie nur Verzeichnisse im Ordner und keine Dateien haben, geschieht dies wie folgt:
quelle
Beste Weg, um zu Ihrem Laufwerk zu navigieren und einfach auszuführen
und um alle Ordner insgesamt zu finden, einschließlich Unterverzeichnisse?
... oder alle Ordner im Stammverzeichnis finden (ohne Unterverzeichnisse)?
Prost!
quelle
-lR
das Verzeichnisfind -type d
mit dem Punktpräfix ignorieren, während sie gezählt werden. Daher ist die vom ersten Befehl angegebene Anzahl falsch, wenn Sie Verzeichnisse mit Punktpräfix haben (Beispiel: Sie haben das Unterverzeichnis .git!). Sie können nicht einfach verwenden,-lRa
da Sie auch für jedes Verzeichnis einen.
und einen..
Eintrag erhalten. Dies gilt auch für die Antwort von @Pavel AnossovFühren Sie
stat -c %h folder
2 aus und subtrahieren Sie sie vom Ergebnis. Dies verwendet nur einen einzigen Teilprozess im Gegensatz zu den 2 (oder sogar 3), die von den meisten anderen Lösungen hier benötigt werden (typischerweisefind
pluswc
).Mit sh / bash:
Verwenden von csh / tcsh:
Erläuterung:
stat -c %h folder
Gibt die Anzahl der Hardlinks zum Ordner aus , und jeder Unterordner unter dem Ordner enthält einen ../-Eintrag, bei dem es sich um einen Hardlink zurück zum Ordner handelt . Sie müssen 2 subtrahieren, da die Anzahl zwei zusätzliche Hardlinks enthält:quelle
Ich denke, das ist am einfachsten
Wo
images
ist dein Zielverzeichnis? Das Flag -d ist auf Verzeichnisse beschränkt, und das Flag -l führt eine zeilenweise Auflistung durch, die mit derwc -l
für die Zeilenanzahl sehr bekannten Liste kompatibel ist .quelle
man ls
,-d
tut: "Verzeichnisse selbst auflisten, nicht deren Inhalt", das heißt, wenn Sie ausführenls /tmp
, erhalten Sie, was drin ist/tmp
, und wenn Sie ausführen, erhaltenls -d /tmp
Sie nur/tmp
. Der-d
Switch filtert keine Verzeichnisse, wie gewünscht.Einige nützliche Beispiele:
Dateien im aktuellen Verzeichnis zählen
Zählverzeichnisse im aktuellen Verzeichnis
Zählen Sie Dateien und Verzeichnisse im aktuellen Verzeichnis
Zählen Sie Dateien und Verzeichnisse in einem Unterverzeichnis
Ich habe eine seltsame Sache bemerkt (zumindest in meinem Fall):
quelle
Kein Verzeichnis, das wir mit dem folgenden Befehl finden können
ls -l | grep "^d" | wc -l
quelle
ls -l | grep ^d | wc -l
wird es tun, es gibt keine Notwendigkeit,"
hier zu verwendenEine reine Bash-Lösung:
Wenn Sie auch die versteckten Verzeichnisse zählen möchten:
Beachten Sie, dass dies auch Links zu Verzeichnissen zählt. Wenn Sie das nicht wollen, ist es mit dieser Methode etwas schwieriger.
Verwenden von
find
:Der Trick besteht darin
x
, jedes Mal, wenn ein Verzeichnis gefunden wird, ein to stdout auszugeben und dannwc
die Anzahl der Zeichen zu zählen. Dies zählt die Anzahl aller Verzeichnisse (einschließlich versteckter) ohne Links.Die hier vorgestellten Methoden sind alle sicher für lustige Zeichen, die in Dateinamen (Leerzeichen, Zeilenumbrüche, Glob-Zeichen usw.) vorkommen können.
quelle
Verwenden von
zsh
:Das
N
ist ein Nullglob,/
macht es mit Verzeichnissen übereinstimmen,#
zählt. Leerzeichen in Verzeichnisnamen werden sauber verarbeitet und zurückgegeben,0
wenn keine Verzeichnisse vorhanden sind.quelle
Zählen Sie alle Dateien und Unterordner im Windows-Stil:
quelle
Wenn Sie reguläre Ausdrücke verwenden möchten, versuchen Sie Folgendes:
quelle
Die beste Antwort auf das, was Sie wollen, ist
dies subtrahiert einen, um das unerwünschte '.' zu entfernen. Verzeichnis, das Listen findet (wie oben erwähnt patel deven).
Wenn Sie Unterordner rekursiv zählen möchten, lassen Sie die Option maxdepth einfach weg
PS Wenn Sie die Befehlsersetzung als hässlich empfinden, können Sie sie mit
sed
und als reinen Stream subtrahierenbc
.Subtrahieren von eins von der Zählung:
oder Hinzufügen von count zu minus eins:
quelle
Der beste Weg, es zu tun:
Dies gibt Ihnen die perfekte Zählung.
quelle
total
? Ihre Methode ist kaputt:(
. Nicht analysierenls
!