Verzeichnisse in Bash rekursiv durchlaufen
- Verzeichnisse in Bash rekursiv durchlaufen
- Durchlaufen Sie das Verzeichnis rekursiv, um die Dateien mit einer bestimmten Erweiterung abzurufen
- Durchlaufen Sie das Verzeichnis rekursiv, um die Datei in ein anderes Verzeichnis zu verschieben
- Durchlaufen Sie das Verzeichnis rekursiv, um die Dateien zu löschen
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:
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.
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'
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:
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