【发布时间】:2018-11-13 19:51:16
【问题描述】:
拜托,我需要重命名多个文件的帮助。我们每天生成 3 份报告中的一个应用程序,文件掩码为 OPEN_REPORTn_yyyymmddHH24Miss.csv,例如,如下所示:
/mnt/server/OPEN_REPORT1_20180604130922.csv
/mnt/server/OPEN_REPORT2_20180604130922.csv
/mnt/server/OPEN_REPORT3_20180604130922.csv
我希望这个文件复制为
/mnt/server/OPEN_REPORT1.csv
/mnt/server/OPEN_REPORT2.csv
/mnt/server/OPEN_REPORT3.csv
并保留原始文件而不更改名称(因此,这意味着我必须只列出最后 3 个文件)
我有这个解决方案:
cp $(ls -t /mnt/server/OPEN_REPORT1_* | head -n1) /mnt/server/OPEN_REPORT1.csv
cp $(ls -t /mnt/server/OPEN_REPORT2_* | head -n1) /mnt/server/OPEN_REPORT2.csv
cp $(ls -t /mnt/server/OPEN_REPORT3_* | head -n1) /mnt/server/OPEN_REPORT3.csv
但是这个解决方案不是太有效,因为我需要使用更多的cp 命令。我想只用一次使用cp 命令和正则表达式来复制这些文件。
我正在尝试这样的解决方案:
for file in $(ls -t /mnt/server/OPEN_REPORT?_??????????????.csv | head -n3); do echo ${file} | sed 's/OPEN_REPORT([0-9]{1})/$1/'; done
但是 echo 的结果看起来不太好。
请帮助解决问题?感谢您的任何建议
解决方案(感谢David Peltier):
for file in $(ls -t /mnt/server/OPEN_REPORT?_??????????????.csv | head -n3); do cp $file ${file%_*}.csv; done
【问题讨论】: