使用以下命令,我的脚本成功执行。
for file in collectorlist* ; do mv "$file" "${/bak_/{file}}" ; done
现在我想将 bak_{file} 移动到 {file} 重置为原始文件名。我尝试了以下方式,引发错误。感谢您的建议。
for file in bak_collectorlist*; do mv "$file" "${/bak_/{file}}" ; done
使用以下命令,我的脚本成功执行。
for file in collectorlist* ; do mv "$file" "${/bak_/{file}}" ; done
现在我想将 bak_{file} 移动到 {file} 重置为原始文件名。我尝试了以下方式,引发错误。感谢您的建议。
for file in bak_collectorlist*; do mv "$file" "${/bak_/{file}}" ; done
采用:
for file in bak_collectorlist*; do mv "$file" "${file/bak_/}" ; done
来自bash 人:
${parameter/pattern/string
}模式替换该模式被扩展以产生一个模式,就像在路径名扩展中一样。 参数被扩展,模式 与其值的最长匹配被替换为字符串. 如果pattern 以/ 开头,则pattern 的所有匹配都被替换为字符串。通常只替换第一场比赛。如果pattern以#开头,则必须匹配参数扩展值的开头。如果模式以 % 开头,它必须匹配参数扩展值的末尾。如果 string 为 null,则删除 pattern 的匹配项,并且可以省略 / 后面的 pattern。如果参数是@或*,则依次对每个位置参数应用替换操作,展开是结果列表。如果parameter是一个以@或*为下标的数组变量,则对数组的每个成员依次进行替换操作,展开就是结果列表
.
演示
$ 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 反转为原始文件名
for file in bak_collectorlist*; do mv "./bak_/${file}" "$file" ; done