在bash中替换filename中的字符串

时间:2014-06-27 14:49:38

标签: regex string bash

所以我有这个功能

ren_barrow(){
    for file in *.clu
    do
        mv -f $file ${file//RELEASE/"$1"}
    done
}

但是当我运行它时,您可以看到以.clu结尾的每个文件都将被重命名。

我想在mv周围放一个if语句,说明文件名中是否包含RELEASE,然后继续。如果我没有这个if语句,我会收到错误

Cannot rename: $file and $file is the same file.

ren_barrow(){
    for file in *.clu
    do
        # if $file grep "RELEASE"; then
            mv -f $file ${file//RELEASE/"$1"}
        # fi
    done
}

2 个答案:

答案 0 :(得分:4)

您可以使用mv这样的命令:

[[ "$file" != *"RELEASE"* ]] && mv -f "$file" "${file//RELEASE/$1}"

答案 1 :(得分:2)

为什么不更改for循环,以便您不必迭代所有文件?

for file in *RELEASE*.clu
do
    mv -f "$file" "${file//RELEASE/$1}"
done

更好的是,如果你拥有它,请使用rename命令:

rename RELEASE "" *RELEASE*.clu