Datum: 2003-02-11
Quelle: suse-linux
Prinzipiell ähneln die folgenden Schnipsel mehr oder weniger den Lösungen in anderen Artikeln, die sich mit dem Umbenennen von Dateien befassen. Ich habe sie trotzdem aufgenommen, weil ein paar interessante Varianten existieren. Alle Versionen fangen den Fall ab, dass die Zieldatei bereits existieren könnte. Es geht also darum, Leerzeichen in Dateinamen zu ersetzen (hier durch den Unterstrich _).
# im aktuellen Verzeichnis / in the current directory
ls | while read f; do
test -f "$f" || continue
n="`echo \"$f\" | sed 's/ /_/g'`"
if test -e "$n"; then
echo "Ziel \"$n\" existiert / destination \"$n\" exists" >&2
else
mv "$f" "$n"
fi
done
# in einem anderen Verzeichnis / for another directory
ls "$dir" | while read f; do
test -f "$dir/$f" || continue
n="$dir/`echo \"$f" | sed 's/ /_/g'`"
if test -e "$n"; then
echo "Ziel \"$n\" existiert / destination \"$n\" exists" >&2
else
mv "$dir/$f" "$n"
fi
done
# rekursiv / recursive
find "$dir" -type f -print | while read f; do
n="`dirname \"$f\"`/`basename \"$f\" | sed 's/ /_/g'`"
if test -e "$n"; then
echo "Ziel \"$n\" existiert / destination \"$n\" exists" >&2
else
mv "$f" "$n"
fi
done
Der test am Schleifenanfang in den ersten beiden Varianten verwirft alle "Nicht-Dateien" (Verzeichnisse, Links, Devices, Named Pipes).