bash删除文件名的一部分 [英] bash removing part of a file name
问题描述
我具有以下格式的以下文件:
I have the following files in the following format:
$ 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
我要删除此部分: 20140211144020
(这是运行报告的时间戳记,因此会有所不同)
I would like this part removed:
20140211144020
(this is the timestamp the reports were run so this will vary)
并以类似以下内容结束:
and end up with something like:
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
我只是按照的思路思考mv 命令,也许像这样:
I was thinking simply along the lines of the mv command, maybe something like this:
$ ls CombinedReports_LLL-*'('*.csv
但 sed 命令或其他命令会更好
but maybe a sed command or other would be better
推荐答案
重命名
是 perl
软件包的一部分.它根据perl样式的正则表达式重命名文件.要从文件名中删除日期,请执行以下操作:
rename
is part of the perl
package. It renames files according to perl-style regular expressions. To remove the dates from your file names:
rename 's/[0-9]{14}//' CombinedReports_LLL-*.csv
如果没有 rename
,则可以使用 sed
+ shell
:
If rename
is not available, sed
+shell
can be used:
for fname in Combined*.csv ; do mv "$fname" "$(echo "$fname" | sed -r 's/[0-9]{14}//')" ; done
以上内容循环遍历您的每个文件.对于每个文件,它执行 mv
命令: mv"$ fname"" $(echo"$ fname" | sed -r's/[0-9] {14}//')'
其中,在这种情况下, sed
是能够使用与上述 rename
命令相同的正则表达式. s/[0-9] {14}//
告诉 sed
连续查找14位数字并将其替换为空字符串.
The above loops over each of your files. For each file, it performs a mv
command: mv "$fname" "$(echo "$fname" | sed -r 's/[0-9]{14}//')"
where, in this case, sed
is able to use the same regular expression as the rename
command above. s/[0-9]{14}//
tells sed
to look for 14 digits in a row and replace them with an empty string.
这篇关于bash删除文件名的一部分的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!