Mam skrypt, który sprawia mi pewne problemy, wiem, że muszę to zrobić rekurencyjnie, ale mam pewne problemy. Skrypt powinien zmienić nazwę wszystkich plików i folderów w danym folderze, usuwając znaki specjalne, takie jak $ -,) (! I zamieniając „” na „_”
Oto fragment, który muszę wykonać ponownie:
# Rename directories
find "$ORIG_DIR" -name "*" -type d| while read dname
do
NEW_DIR=`echo "$dname" |sed -E 's/^[ \t]*//g; s/[ \t]*$//g; s/\./_/g; s/\,/_/g; s/ /_/g'`
# Rename files
find "$ORIG_DIR" -name "*" -type f | while read fname
do
NEW_FNAME=`echo "$fname" |sed -E 's/^[ \t]*//g; s/[ \t]*$//g; s/\./_/g; s/(.*)_/\1\./; s/\,/_/g; s/ /_/g'`
if [ -e $NEW_FNAME ]
then
echo "$NEW_FNAME already exists. Not replacing $fname"
else
echo "Replacing $fname with $NEW_FNAME"
mv "$fname" $NEW_FNAME
fi
done
if [ -e $NEW_DIR ]
then
echo "$NEW_DIR already exists. Not replacing $dname"
else
echo "Replacing $dname with $NEW_DIR"
mv "$dname" $NEW_DIR
fi
done
END
find
komendy zawsze będą przechodzić przez całe drzewo katalogów (zamień funkcjonalność wewnątrz na instrukcje echo, aby zobaczyć, co się dzieje).