So zeigen Sie die Anzahl der Elemente in Unterverzeichnissen über die Befehlszeile an

So zeigen Sie die Anzahl der Elemente in Unterverzeichnissen über die Befehlszeile an

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:

Nautilus-Screenshot

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 ( \012in 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:

  1. Sie können es in mehreren Verzeichnissen ausführen:

    lsc /path/to/dir /path/to/dir2 ... /path/to/dirN
    

    Oder auf dem aktuellen:

    lsc
    
  2. Es kann mit beliebigen Datei- und Verzeichnisnamen funktionieren, sogar mit solchen, die Leerzeichen oder Zeilenumbruchzeichen enthalten, wie Sie oben sehen können.

verwandte Informationen