bash删除文件名的一部分

Hat*_*kNZ 9 bash shell rename sed mv

我有以下格式的以下文件:

$ ls CombinedReports_LLL-*'('*.csv
CombinedReports_LLL-20140211144020(Untitled_1).csv
CombinedReports_LLL-20140211144020(Untitled_11).csv
CombinedReports_LLL-20140211144020(Untitled_110).csv
CombinedReports_LLL-20140211144020(Untitled_111).csv
CombinedReports_LLL-20140211144020(Untitled_12).csv
CombinedReports_LLL-20140211144020(Untitled_13).csv
CombinedReports_LLL-20140211144020(Untitled_14).csv
CombinedReports_LLL-20140211144020(Untitled_15).csv
CombinedReports_LLL-20140211144020(Untitled_16).csv
CombinedReports_LLL-20140211144020(Untitled_17).csv
CombinedReports_LLL-20140211144020(Untitled_18).csv
CombinedReports_LLL-20140211144020(Untitled_19).csv
Run Code Online (Sandbox Code Playgroud)

我希望删除此部分:(
20140211144020这是报告运行的时间戳,因此会有所不同)

并最终得到类似的东西:

CombinedReports_LLL-(Untitled_1).csv
CombinedReports_LLL-(Untitled_11).csv
CombinedReports_LLL-(Untitled_110).csv
CombinedReports_LLL-(Untitled_111).csv
CombinedReports_LLL-(Untitled_12).csv
CombinedReports_LLL-(Untitled_13).csv
CombinedReports_LLL-(Untitled_14).csv
CombinedReports_LLL-(Untitled_15).csv
CombinedReports_LLL-(Untitled_16).csv
CombinedReports_LLL-(Untitled_17).csv
CombinedReports_LLL-(Untitled_18).csv
CombinedReports_LLL-(Untitled_19).csv
Run Code Online (Sandbox Code Playgroud)

我只是按照mv命令的思路思考,可能是这样的:

$ ls CombinedReports_LLL-*'('*.csv
Run Code Online (Sandbox Code Playgroud)

但也许一个sed命令或其他更好

Joh*_*024 14

renameperl包的一部分.它根据perl样式的正则表达式重命名文件.要从文件名中删除日期:

rename 's/[0-9]{14}//' CombinedReports_LLL-*.csv
Run Code Online (Sandbox Code Playgroud)

如果rename没有,可以使用sed+ shell:

for fname in Combined*.csv ; do mv "$fname" "$(echo "$fname" | sed -r 's/[0-9]{14}//')" ; done
Run Code Online (Sandbox Code Playgroud)

上面的循环遍历每个文件.对于每个文件,它执行一个mv命令: mv "$fname" "$(echo "$fname" | sed -r 's/[0-9]{14}//')"在这种情况下,sed它可以使用与rename上面命令相同的正则表达式. s/[0-9]{14}//告诉我sed连续查找14位数字并用空字符串替换它们.


Alf*_*lfe 7

不使用其他工具,例如renamesed严格坚持bash单独使用:

for f in CombinedReports_LLL-*.csv
do
  newName=${f/LLL-*\(/LLL-(}
  mv -i "$f" "$newName"
done
Run Code Online (Sandbox Code Playgroud)

  • 为什么?当然要清楚.深入了解其他程序员的心灵,并猜测哪种解决方案最能被理解.我的猜测是,通过OP提出他的问题的方式,他会用一个像`newName`这样的说法变量名来更好地理解它. (2认同)