移动具有日期编码名称的文件集

时间:2012-07-29 23:03:10

标签: unix ubuntu mv

我有一组包含日期的文件。

让我们打电话给他们:

 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之间) 。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用范围:

mv *20120528_1[23]* file/

要排除3-8之间的所有内容,请稍微复杂一点:

mv *20120528_{0[0-29],[12]*}*
  • [0-29]细分为0-29
  • {A,B}扩展为AB

答案 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更复杂的东西。但不确定你是否需要那么多的复杂性。