我有一组包含日期的文件。
让我们打电话给他们:
a20120528_120001.log
b20120528_120003.log
(name)(year)(month)(day)_(hour)(minute)(second).log
通过执行以下操作可以轻松地同时移动这两个文件:
mv *20120528_12* file/
但现在我有一种情况,我想在同一天移动几个小时的文件,即:
a20120528_120001.log
b20120528_120003.log
a20120528_130001.log
b20120528_130003.log
a20120528_140001.log
b20120528_140003.log
现在,如果我想转移所有这些,我可以做一天:
mv *20120528* file/
但是,如果我只想移动12和13小时,但是排除14,我该怎么办。
请注意,这需要足够通用,我可以输入日期,因为这将延伸到多天使用,每天有24个日志,每天排除几个(3-8之间) 。
我该怎么做?
答案 0 :(得分:1)
您可以使用范围:
mv *20120528_1[23]* file/
要排除3-8之间的所有内容,请稍微复杂一点:
mv *20120528_{0[0-29],[12]*}*
[0-29]
细分为0-2
和9
。{A,B}
扩展为A
或B
。答案 1 :(得分:1)
这是一个很好的问题,因为在Bash中,文件名扩展仅使用*
,?
和[
。因此,您只能通过以下方式处理12小时和13小时:
[ab]20??????_1[23]????.log
请注意,这只会带你到2099年;如果困扰你,请相应调整。
但是如果您需要一般范围的值,则需要多个命令。如果您有00到23小时,并且想要排除03到08,我认为您需要以下内容:
[ab]20??????_0[0129]????.log
[ab]20??????_1?????.log
[ab]20??????_2[0123]????.log
当然,你也可以编写一个脚本来生成正确的模式,使用比文件名为globbing更复杂的东西。但不确定你是否需要那么多的复杂性。