webentwicklung-frage-antwort-db.com.de

Shellscript Durchlaufen aller Dateien in einem Ordner

Ich möchte ein Shell-Skript schreiben, das alle Dateien in einem Ordner durchläuft und das Echo "put $ {filename}" wiedergibt. Kann mir jemand die richtige Richtung zeigen?

16
skline

Für Dateien und Verzeichnisse nicht rekursiv

for filename in *; do echo "put ${filename}"; done

Nur für Dateien (schließt Ordner aus), nicht rekursiv

for file in *; do 
    if [ -f "$file" ]; then 
        echo "$file" 
    fi 
done

Eine rekursive Lösung finden Sie in der Antwort von Bennet Yee.

21

rekursiv, einschließlich Dateien in Unterverzeichnissen?

find dir -type f -exec echo "put {}" \;

nur Dateien in diesem Verzeichnis?

find dir -maxdepth 1 -type f -exec echo "put {}" \;
6
Bennet Yee

Für alle Ordner und Dateien im aktuellen Verzeichnis

for file in *; do
    echo "put $file"
done

Oder, wenn Sie nur Unterverzeichnisse und Dateien einschließen möchten:

find . -type f -exec echo put {} \;

Wenn Sie die Ordner selbst einschließen möchten, entfernen Sie den -type f-Teil.

5
Kevin

Wenn Sie keine Dateien haben, können Sie dies anstelle des Druckens * tun. 

format=*.txt
for i in $format;
do
 if [[ "$i" == "$format" ]]
 then
    echo "No Files"
 else
    echo "file name $i"
 fi
done
2
Mad-D

Eine weitere Alternative mit ls und sed:

$ ls -1 <dir> | sed -e 's/^/put /'

und ls und xargs verwenden:

$ ls -1 <dir> | xargs -n1 -i%f echo 'put %f'
1
jcollado

dies funktioniert auch rekursiv, wenn sich darin Unterverzeichnisse und Dateien befinden:

find . -type f|awk -F"/" '{print "put ",$NF}'
0
Vijay