Shell 查找并替换循环外壳

Shell 查找并替换循环外壳,shell,file-handling,find-replace,Shell,File Handling,Find Replace,使用下面的命令,我的脚本成功执行 for file in collectorlist* ; do mv "$file" "${/bak_/{file}}" ; done 现在我想将bak_{file}移动到{file},并重置为原始文件名。我尝试了下面的方法,抛出了一个错误。谢谢你的建议 for file in bak_collectorlist*; do mv "$file" "${/bak_/{file}}" ; done 您需要在第二次运行时将文件名从bak反转为原始文件名 f

使用下面的命令,我的脚本成功执行

for file in collectorlist*  ; do mv "$file" "${/bak_/{file}}" ; done 
现在我想将bak_{file}移动到{file},并重置为原始文件名。我尝试了下面的方法,抛出了一个错误。谢谢你的建议

for file in bak_collectorlist*; do mv "$file" "${/bak_/{file}}" ; done 

您需要在第二次运行时将文件名从bak反转为原始文件名

 for file in bak_collectorlist*; do mv "./bak_/${file}" "$file"  ; done 
使用:

来自bash

${parameter/pattern/string
}模式替换

模式被扩展以产生一个模式,就像在路径名中一样 扩张参数展开和模式的最长匹配 在中,其值替换为字符串。如果模式以/,开头, 模式的所有匹配项都替换为字符串。通常只有 第一场比赛被替换。如果图案以#开头,则必须匹配 在参数展开值的开头。如果模式 以%开始,它必须在扩展值的末尾匹配 参数如果字符串为空,则删除模式的匹配项,并且 /可以省略以下模式。如果参数为@或*,则 替换操作应用于中的每个位置参数 旋转,展开就是结果列表。如果参数是 数组变量下标为@或*,替换操作为 依次应用于阵列的每个成员,扩展是 结果列表

演示

$ ll bak_collectorlist*
-rw-r----- 1 klashxx klashxx 2 Jun 19 09:13 bak_collectorlist
-rw-r----- 1 klashxx klashxx 2 Jun 19 09:13 bak_collectorlist2
$
$ for file in bak_collectorlist*;do echo "$file" "${file/bak_/}" ; done
bak_collectorlist collectorlist
bak_collectorlist2 collectorlist

我试过了,它给出了错误“${/bak_/{file}}:错误替换”抱歉@pritesh这行不通,因为shell会在另一个文件夹中思考和查找。嘿@klashxx它工作得很好。你能解释一下它是如何工作的吗。,这将有助于理解better@Satte请参阅我随附的
man
qoute供您参考,如果您需要更多信息,请告诉我。非常感谢@klashxx
$ ll bak_collectorlist*
-rw-r----- 1 klashxx klashxx 2 Jun 19 09:13 bak_collectorlist
-rw-r----- 1 klashxx klashxx 2 Jun 19 09:13 bak_collectorlist2
$
$ for file in bak_collectorlist*;do echo "$file" "${file/bak_/}" ; done
bak_collectorlist collectorlist
bak_collectorlist2 collectorlist