Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在bash中替换文件名中的字符串_Regex_String_Bash - Fatal编程技术网

Regex 在bash中替换文件名中的字符串

Regex 在bash中替换文件名中的字符串,regex,string,bash,Regex,String,Bash,所以我有这个函数 ren_barrow(){ for file in *.clu do mv -f $file ${file//RELEASE/"$1"} done } 但当我运行这个程序时,正如您所看到的,以.clu结尾的每个文件都将被重命名 我想在mv周围放一条if语句,说明文件名中是否包含RELEASE,然后继续。如果我没有这个If语句,我会得到以下错误 无法重命名:$file和$file是同一个文件。 ren_barrow(){ for

所以我有这个函数

ren_barrow(){
    for file in *.clu
    do
        mv -f $file ${file//RELEASE/"$1"}
    done
}
但当我运行这个程序时,正如您所看到的,以.clu结尾的每个文件都将被重命名

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

无法重命名:$file和$file是同一个文件。

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

您可以使用如下
mv
命令:

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

您可以使用如下
mv
命令:

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

为什么不更改
for
循环,这样就不必迭代所有文件

for file in *RELEASE*.clu
do
    mv -f "$file" "${file//RELEASE/$1}"
done
更好的是,如果您有命令,请使用该命令:

rename RELEASE "" *RELEASE*.clu

为什么不更改
for
循环,这样就不必迭代所有文件

for file in *RELEASE*.clu
do
    mv -f "$file" "${file//RELEASE/$1}"
done
更好的是,如果您有命令,请使用该命令:

rename RELEASE "" *RELEASE*.clu

谢谢,您能解释一下此语句是如何工作的吗?此条件
[“$file”!=*“RELEASE”*]
正在使用全局模式来确定
$filename
中是否还包含文本
RELEASE
。另请参阅《谢谢指南》,您能解释一下此语句是如何工作的吗?此条件
[]“$file”!=*“RELEASE”*]
正在使用全局模式确定
$filename
中是否尚未包含文本
RELEASE
。另请参阅上的指南