In der grafischen Benutzeroberfläche von Ubuntu kann ich die Unterverzeichnisse in einem Verzeichnis auflisten, wobei eine Spalte die Anzahl der Elemente in diesen Unterverzeichnissen darstellt. Wie hier gezeigt:
Gibt es eine Möglichkeit, über die Befehlszeile dasselbe Ergebnis (Anzahl der Elemente in der Größenspalte) zu erhalten?
Antwort1
Hier ist eine kleine Shell-Funktion, die Sie verwenden können. Fügen Sie einfach diese Zeilen zu Ihrem hinzu ~/.bashrc
:
lsc(){
## globs that don't match should expand to a null string
shopt -s nullglob
## If no arguments were given use the current dir
if [[ $# -eq 0 ]]; then
targets="."
## Otherwise, use whatever was given
else
targets=($@)
fi
## iterate over the arguments given
for target in "${targets[@]}"; do
## get the contents of the target
contents=("$target"/*)
## iterate over the contents
for thing in "${contents[@]}"; do
## If this one is a directory
if [[ -d "$thing" ]]; then
## collect the directory's contents
count=("$thing"/*)
## Print the dir's name (with a '/' at the end)
## and the number of items found in it
printf "%s/ (%s)\n" "$thing" "${#count[@]}"
else
## If this isn't a dir, just print the name
printf "%s\n" "$thing"
fi
done
done
}
Öffnen Sie dann ein neues Terminal und führen Sie aus:
lsc /path/to/dir
Nehmen wir beispielsweise das folgende Verzeichnis ( \012
in den Namen sind Zeilenumbrüche enthalten):
$ tree
.
├── a bad one
│ └── file 1
├── a bad worse\012one
│ └── file 1 \012two
├── dir1
│ └── file
├── dir2
│ ├── file1
│ └── file2
├── dir3
│ ├── file1
│ ├── file2
│ └── file3
├── dir4
│ └── dir
├── empty_dir
8 directories, 7 files
Sie erhalten:
$ lsc
./a bad one/ (1)
./a bad worse
one/ (1)
./dir1/ (1)
./dir2/ (2)
./dir3/ (3)
./dir4/ (1)
./empty_dir/ (0)
./mp3/ (1)
Die Hauptvorteile dieses Ansatzes sind:
Sie können es in mehreren Verzeichnissen ausführen:
lsc /path/to/dir /path/to/dir2 ... /path/to/dirN
Oder auf dem aktuellen:
lsc
Es kann mit beliebigen Datei- und Verzeichnisnamen funktionieren, sogar mit solchen, die Leerzeichen oder Zeilenumbruchzeichen enthalten, wie Sie oben sehen können.