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?
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.
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 {}" \;
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.
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
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'
dies funktioniert auch rekursiv, wenn sich darin Unterverzeichnisse und Dateien befinden:
find . -type f|awk -F"/" '{print "put ",$NF}'