我有以下脚本,但由于某种原因它不起作用
find . -name '*---*' | while read fname3
do
new_fname3=`echo $fname3 | tr "---" "-"`
if [ -e $new_fname3 ]
then
echo "File $new_fname3 already exists. Not replacing $fname3"
else
echo "Creating new file $new_fname3 to replace $fname3"
mv "$fname3" $new_fname3
fi
done
但是如果我使用
find . -name '*---*' | while read fname3
do
new_fname3=`echo $fname3 | tr "-" "_"`
if [ -e $new_fname3 ]
then
echo "File $new_fname3 already exists. Not replacing $fname3"
else
echo "Creating new file $new_fname3 to replace $fname3"
mv "$fname3" $new_fname3
fi
done
脚本可以工作,但我最终得到了 3 个下划线“_”,如何用一个破折号替换 3 个破折号“---”?
谢谢
最佳答案
看看man tr
。 tr
将仅替换单个字符。
使用类似 perl -wpe "s/---/-/"
的内容。
另请参阅man 1p rename
。它所做的几乎正是您想要的:
rename 's/---/-/' *---*
关于linux - Bash 重命名文件脚本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16696433/