1

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

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

现在我想将 bak_{file} 移动到 {file} 重置为原始文件名。我尝试了以下方式,引发错误。感谢您的建议。

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

2 回答 2

0

采用:

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
于 2017-06-19T07:12:58.273 回答
-1

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

 for file in bak_collectorlist*; do mv "./bak_/${file}" "$file"  ; done 
于 2017-06-19T07:10:01.790 回答