Bash重命名文件脚本不起作用

时间:2013-05-22 15:58:54

标签: linux bash

我有以下脚本,由于某种原因它无法正常工作

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个短划线" ---"用一个短划线?

谢谢,

2 个答案:

答案 0 :(得分:0)

看看man trtr只会替换单个字符。

使用类似perl -wpe "s/---/-/"的内容。

另请查看man 1p rename。它正在做你想做的事情:

rename 's/---/-/' *---*

答案 1 :(得分:0)

我认为您需要为tr替换更改sed

tr '---' '-'应更改为sed -e 's/---/-/g

作为差异的一个例子:

$ echo "a---b" | tr '---' '-'
tr: unrecognised option '---'
try `tr --help' for more information

$ echo "a---b" | sed -e 's/---/-/g'
a-b