Verzeichnisse in Bash rekursiv durchlaufen

Sheeraz Gul 15 Februar 2024
  1. Verzeichnisse in Bash rekursiv durchlaufen
  2. Durchlaufen Sie das Verzeichnis rekursiv, um die Dateien mit einer bestimmten Erweiterung abzurufen
  3. Durchlaufen Sie das Verzeichnis rekursiv, um die Datei in ein anderes Verzeichnis zu verschieben
  4. Durchlaufen Sie das Verzeichnis rekursiv, um die Dateien zu löschen
Verzeichnisse in Bash rekursiv durchlaufen

Dieses Tutorial zeigt, wie man Verzeichnisse rekursiv in Bash durchläuft.

Verzeichnisse in Bash rekursiv durchlaufen

Das Durchlaufen von Verzeichnissen ist häufig erforderlich, wenn Sie mit verschiedenen Verzeichnissen arbeiten. Wir können ähnliche Befehle in allen Linux-Terminals, einschließlich Bash, verwenden, um Verzeichnisse rekursiv zu durchlaufen.

Zuerst verwenden wir den find-Befehl, um die Struktur des aktuellen Verzeichnisses zu sehen. Der Befehl find zeigt alle Dateien und Ordner im aktuellen oder angegebenen Verzeichnis.

So sehen Sie alle Dateien:

find . -type f -print0

So sehen Sie die Dateien eines bestimmten Verzeichnisses:

find /mnt/c/Users/Sheeraz/DemoFolder1 -type f -print0

/mnt/c/Users/Sheeraz/DemoFolder1 ist der Verzeichnispfad, den wir überprüfen möchten. Die Struktur dieses Verzeichnisses ist wie folgt:

Verzeichnisaufbau

Die Option -type f wird verwendet, um nur die Dateien dieses Verzeichnisses, aber nicht die Ordner zu erhalten. Die Ausgabe für diesen Befehl ist unten.

/mnt/c/Users/Sheeraz/DemoFolder1/Delftstack.java/mnt/c/Users/Sheeraz/DemoFolder1/delftstack.rtf/mnt/c/Users/Sheeraz/DemoFolder1/demo.bmp/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Delftstack.java/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/delftstack.rtf/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/demo.bmp/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Example1.java/mnt/c/Users/Sheeraz/DemoFolder1/Example1.java/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Delftstack.java/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/delftstack.rtf/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/demo.bmp/mnt/c/Users/Sheeraz/D

Wenn Sie auch die Ordner des Verzeichnisses erhalten möchten, löschen Sie das -type f aus den obigen Befehlen.

find /mnt/c/Users/Sheeraz/DemoFolder1 -print0

Sobald wir die Struktur der Dateinamen kennen, verwenden wir den folgenden Code, um ein Verzeichnis rekursiv zu durchlaufen:

for x in $(find /mnt/c/Users/Sheeraz/DemoFolder1 -type f -print0)
do
    echo $x;
done;

Der obige Code durchläuft rekursiv das Verzeichnis /mnt/c/Users/Sheeraz/DemoFolder1 und echo den Namen jeder Datei. Sehen Sie sich die Ausgabe für diesen Befehl an:

/mnt/c/Users/Sheeraz/DemoFolder1/Delftstack.java/mnt/c/Users/Sheeraz/DemoFolder1/delftstack.rtf/mnt/c/Users/Sheeraz/DemoFolder1/demo.bmp/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Delftstack.java/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/delftstack.rtf/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/demo.bmp/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Example1.java/mnt/c/Users/Sheeraz/DemoFolder1/Example1.java/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Delftstack.java/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/delftstack.rtf/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/demo.bmp/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Example1.java

Durchlaufen Sie das Verzeichnis rekursiv, um die Dateien mit einer bestimmten Erweiterung abzurufen

Wie wir sehen können, müssen wir nicht alle Dateien zeigen oder mit ihnen arbeiten. Wir können diesen Befehl auch mit der Option -name verwenden, um die Dateien mit einer bestimmten Erweiterung zu erhalten.

Siehe die Befehle:

for x in $(find /mnt/c/Users/Sheeraz/DemoFolder1 -type f -name '*.java');
do
    echo $x;
done;

Der obige Code druckt nur die Dateien in /mnt/c/Users/Sheeraz/DemoFolder1 mit der Erweiterung .java. Siehe die Ausgabe:

/mnt/c/Users/Sheeraz/DemoFolder1/Delftstack.java
/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Delftstack.java
/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Example1.java
/mnt/c/Users/Sheeraz/DemoFolder1/Example1.java
/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Delftstack.java
/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Example1.java

Durchlaufen Sie das Verzeichnis rekursiv, um die Datei in ein anderes Verzeichnis zu verschieben

Wir können die Dateien auch verschieben, indem wir ein Verzeichnis mit dem Bash-Befehl mv rekursiv durchlaufen; Die Syntax für diesen Befehl ist unten.

mv -v $filename $destination directory

Wir können diesen Befehl in einer rekursiven Schleife verwenden, um die Dateien in ein Zielverzeichnis zu verschieben. Versuchen wir es an einem Beispiel.

for x in $(find /mnt/c/Users/Sheeraz/DemoFolder1 -type f -name '*.java');
do
    mv -v $x /mnt/c/Users/Sheeraz/DemoFolder2
done;

Der DemoFolder2 ist ein leeres Verzeichnis.

Zielverzeichnis vor dem Verschieben

Ausgang:

renamed '/mnt/c/Users/Sheeraz/DemoFolder1/Delftstack.java' -> '/mnt/c/Users/Sheeraz/DemoFolder2/Delftstack.java'
renamed '/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Delftstack.java' -> '/mnt/c/Users/Sheeraz/DemoFolder2/Delftstack.java'
renamed '/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Example1.java' -> '/mnt/c/Users/Sheeraz/DemoFolder2/Example1.java'
renamed '/mnt/c/Users/Sheeraz/DemoFolder1/Example1.java' -> '/mnt/c/Users/Sheeraz/DemoFolder2/Example1.java'
renamed '/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Delftstack.java' -> '/mnt/c/Users/Sheeraz/DemoFolder2/Delftstack.java'
renamed '/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Example1.java' -> '/mnt/c/Users/Sheeraz/DemoFolder2/Example1.java'

Zielverzeichnis nach dem Verschieben

Wie wir sehen können, hat der Befehl das Verzeichnis rekursiv durchlaufen und die Dateien mit der Endung java in das Zielverzeichnis verschoben.

Durchlaufen Sie das Verzeichnis rekursiv, um die Dateien zu löschen

Wir können den Befehl rm -rf verwenden, um die Dateien aus dem angegebenen Verzeichnis zu entfernen. Die Syntax für diesen Befehl ist unten.

rm -rf $filename

Setzen wir diesen Befehl in eine rekursive Schleife, um alle Dateien rekursiv aus dem Verzeichnis zu entfernen.

for x in $(find /mnt/c/Users/Sheeraz/DemoFolder1 -type f);
do
    rm -rf $x
done;

Das obige Skript löscht alle Dateien aus dem Hauptverzeichnis und den Unterverzeichnissen; Der Ordner wird nicht gelöscht, da im Befehl nur die Dateien ausgewählt werden. Siehe die Ausgabe:

Datei aus Verzeichnis entfernen

Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Verwandter Artikel - Bash Dictionary