Sie können veranlassen, alle Dateien zu finden, die Dateinamen zu entfernen, eine Zeile mit nur dem Verzeichnisnamen für jede Datei zu hinterlassen und dann zu zählen, wie oft jedes Verzeichnis angezeigt wird:
find . -type f |
sed 's%/[^/]*$%%' |
sort |
uniq -c
Das einzige Problem dabei ist, wenn Sie Dateinamen oder Verzeichnisnamen haben, die ein Zeilenumbruchzeichen enthalten, was ziemlich unwahrscheinlich ist. Wenn Sie sich wirklich Gedanken über Zeilenumbrüche in Dateinamen oder Verzeichnisnamen machen müssen, empfehlen wir Ihnen, diese zu finden und zu korrigieren, damit sie keine Zeilenumbrüche enthalten (und den Schuldigen leise vom Fehler ihres Weges zu überzeugen).
Wenn Sie an der Anzahl der Dateien in jedem Unterverzeichnis des aktuellen Verzeichnisses interessiert sind und alle Dateien in den Unterverzeichnissen zusammen mit den Dateien im unmittelbaren Unterverzeichnis zählen, würde ich den sed
Befehl so anpassen , dass er nur gedruckt wird das Verzeichnis der obersten Ebene:
find . -type f |
sed -e 's%^\(\./[^/]*/\).*$%\1%' -e 's%^\.\/[^/]*$%./%' |
sort |
uniq -c
Das erste Muster erfasst den Anfang des Namens, den Punkt, den Schrägstrich, den Namen bis zum nächsten Schrägstrich und den Schrägstrich und ersetzt die Zeile nur durch den ersten Teil.
./dir1/dir2/file1
wird ersetzt durch
./dir1/
Beim zweiten Ersetzen werden die Dateien direkt im aktuellen Verzeichnis erfasst. Sie haben am Ende keinen Schrägstrich und diese werden durch ersetzt ./
. Das Sortieren und Zählen funktioniert dann nur mit der Anzahl der Namen.
./
?