2012-07-29 48 views
3

我有一組包含日期的文件。移動具有日期編碼名稱的文件集

讓我們稱之爲:

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 

現在,如果我想轉移他們所有人,我可以只是d ○天:

mv *20120528* file/ 

,但我可以做什麼,如果我只是想移動小時12和13,但不包括14

請注意,這將需要的通用,以至於我可以輸入日期,因爲這將延伸到多天使用,其中每天有24個日誌,並且幾個(3-8之間)將被排除在每一天之外。

我該怎麼做?

回答

1

您可以使用範圍:

mv *20120528_1[23]* file/ 

對於3-8排除一切,去的稍微複雜些:

mv *20120528_{0[0-29],[12]*}* 
  • [0-29]發生故障的範圍0-29
  • {A,B}擴大爲AB
+0

如果小時小於10,這將如何工作,因爲那麼您必須填充0? – 2012-07-29 23:17:49

+0

修正答案 – Thor 2012-07-29 23:25:41

1

這是一個很好的問題,因爲在猛砸,文件名擴展只使用*?[。所以,你可以處理12小時和13只以下:

[ab]20??????_1[23]????.log 

請注意,這需要你到2099年止;如果您感到困擾,請相應調整。

但是,如果您需要一個通用的值範圍,您將需要多個命令。如果你有時間00至23,並且希望通過08排除03,我想你會需要以下條件:

[ab]20??????_0[0129]????.log 
[ab]20??????_1?????.log 
[ab]20??????_2[0123]????.log 

當然,你也可以寫一個腳本來生成正確的模式,使用的東西比複雜文件名通配符。不知道你是否需要那麼複雜,但。

+0

這是否表示我需要分多個步驟來完成?不是問題,只是想知道? – 2012-07-29 23:20:41

+0

我_think_所以。我真的不知道任何其他方式來做文件擴展。bash中還有其他擴展形式,比如大括號擴展,但我並不認爲它們擴展到現有的文件名中。 – 2012-07-30 04:39:05

相關問題