8 Stimmen

Rekursiv bestimmte Dateien zählen BASH

Mein Ziel ist es, ein Skript zu schreiben, das rekursiv das aktuelle Arbeitsverzeichnis und die Unterverzeichnisse durchsucht und die Anzahl der gewöhnlichen Dateien, die Anzahl der Verzeichnisse, die Anzahl der Block-Spezialdateien, die Anzahl der Zeichen-Spezialdateien, die Anzahl der FIFOs und die Anzahl der symbolischen Links ausgibt. Ich muss Bedingungstests mit [[ ]] verwenden. Das Problem ist, dass ich nicht ganz sicher bin, wie ich überhaupt anfangen soll.

Ich habe etwas wie das Folgende versucht, um nach allen gewöhnlichen Dateien zu suchen, aber ich bin mir nicht sicher, wie die Rekursion in BASH-Skripten genau funktioniert:

function searchFiles(){
    if [[ -f /* ]]; then
        return 1
    fi
}
searchFiles
echo "Number of ordinary files $?"

aber ich erhalte 0 als Ergebnis. Kann mir jemand weiterhelfen?

42voto

MattH Punkte 35368

Warum sollten Sie nicht find ?

$ # Files
$ find . -type f | wc -l
327
$ # Directories
$ find . -type d | wc -l
64
$ # Block special
$ find . -type b | wc -l
0
$ # Character special
$ find . -type c | wc -l
0
$ # named pipe
$ find . -type p | wc -l
0
$ # symlink
$ find . -type l | wc -l
0

3voto

Fredrik Pihl Punkte 42950

Etwas für den Anfang:

#!/bin/bash

directory=0
file=0
total=0

for a in *
do
   if test -d $a; then
      directory=$(($directory+1))
   else
      file=$(($file+1))
   fi

   total=$(($total+1))
   echo $a

done

echo Total directories: $directory
echo Total files: $file
echo Total: $total

Hier gibt es allerdings keine Rekursion, dafür könnte man auf ls -lR oder ähnliches; aber wenn Sie ein externes Programm verwenden wollen, sollten Sie auf die find Das ist die Aufgabe, die es erfüllen soll.

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