我有一组文件,其中有日期。
让我们称它们为:
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之间)将被排除在每天。
我该怎么做呢?
发布于 2012-07-30 07:13:40
您可以使用范围:
mv *20120528_1[23]* file/要排除从3到8的所有内容,请使用稍微复杂的:
mv *20120528_{0[0-29],[12]*}*[0-29]分解到范围9.{A,B}和B.扩展到0-2或A
发布于 2012-07-30 07:14:19
这是一个很好的问题,因为在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当然,您也可以编写一个脚本来生成适当的模式,使用比filename globbing更复杂的东西。不过,我不确定您是否需要那么复杂。
https://stackoverflow.com/questions/11713721
复制相似问题