Tatsächlich habe ich einen Ordner, der mehrere Unterordner mit jeweils zahlreichen Bildern enthält.
Ich versuche, alle Namen der Dateien in jedem Unterordner in einer Textdatei (filesNames.txt) in diesem Unterordner in folgender Form zu sammeln:
Absoluter/Pfad/zu/jeder/Datei/Dateiname
Also habe ich ein Skript im übergeordneten Ordner geschrieben:
#!/bin/sh
for dir in "$PWD"/*/; do
arr=( "$dir"* )
cd "$dir"
printf "%s 1\n" "$PWD/${arr[@]##*/}" > "$dir"filesNames.txt
cd ..
done
Mein Problemist das:
Ich habe die absolute Adresse nur für die erste Datei in jedem Unterordner. Für den Rest gibt es nur Dateinamen ohne absolute Adresse:
/run/media/parent_folder/subfolder/filename1.png
filename2.png
filename3.png
...
Ich denke, es hängt damit zusammen$PWDVariable, die ich für jeden Unterordner nur einmal durchlaufe. Wie kann ich das Skript in eine geeignete Form ändern?
Dank im Voraus.
Antwort1
Ein einziger find
Befehl gibt alle Dateien mit absolutem Pfad aus
find $(pwd) -type f
Antwort2
Und wenn Sie das mit einem reinen Shell-Skript machen und find nicht verwenden möchten, versuchen Sie es mit diesem Kleinen:
#!/bin/bash
#Simple bash recursive loop search - Luciano A. Martini =)
nextdir(){
for f in *; do
if [ -d "$f" ] && [ ! -L "$f" ]; then
#echo "Inside folder: $PWD/$f"
nextdir "$f"
cd ..
continue
else
echo "$PWD/$f"
fi
done
}
#call the function for the first time...
nextdir
Speichern Sie es beispielsweise als rekursive Schleife und führen Sie es in dem Ordner aus, in dem Sie die Suche durchführen möchten. Es wird genau das tun, was Find oder andere rekursive Mechanismen tun, allerdings mit einer For-Schleife, und Sie können es an Ihre Bedürfnisse anpassen!
$./recursive-loop
/home/luciano/readme.txt
/home/luciano/images/a.bmp
/home/luciano/texts/a.txt
/home/luciano/texts/b.txt
/home/luciano/texts/music/lyrics.txt
(...)