나는 약간의 문제를 안고있는 스크립트를 가지고있다. 재귀 적으로 다시해야하지만 약간의 문제가 있음을 알고있다. 스크립트는 $ -,) (!와 같은 특수 문자를 제거하고 ""을 "_"로 대체하여 주어진 폴더의 모든 파일과 폴더의 이름을 바꾸어야합니다.
다시해야 할 부분은 다음과 같습니다.
# 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
이 스크립트로 어디에 문제가 있습니까? 오류 메시지가 표시됩니까? 예상과 다른 결과가 있습니까?
—
nohillside
내가 결국 얻는 오류 메시지는 그러한 파일이나 디렉토리가 없다는 것입니다. 이 스크립트는 또한 제거하지 않습니다!, $ -) (
—
Erick
글쎄, 스크립트의 한가지 문제점은
—
nohillside
find
명령은 항상 전체 디렉토리 트리를 탐색합니다 (무슨 일이 일어나는지 echo 명령문으로 내부 기능을 대체합니다).