2017-10-11 46 views
1

我有一些文件的名稱中包含以下字符串:「20171011095942」,它是日期和時間「2017/10/11 09:59:42」。從字符串的日期中分離時間

text_text_20171011095937_155.DAT.gz 
text_text_20171011095942_156.DAT.gz 

我需要選擇所有在09小時開始的文件,並將它們放在另一個文件夾中。如果我使用命令:

date -d '20171011095942' +'%R' 

它說「無效日期」。我怎樣才能從該字符串中分離出時間,然後我只能選擇那些文件? 謝謝!

+0

是否修復了文件名格式? 'text_text_20171011095942_156.DAT.gz'?你能給我們一些實際的例子嗎?即日期部分是否在第二個'_'之後開始? – Inian

+0

是的,名稱格式是固定的。文件名稱的唯一區別是指向另一個時間和日期的數字序列以及定義文件編號的數字(155,156)。日期部分總是在第二個「_」之後開始 –

回答

2

隨着找到 + MV命令:

find . -type f -regextype posix-egrep -regex ".*_2017101109[0-9]{4}_.*\.gz" -exec mv {} dest_dir/ \; 

在上面的命令改變dest_dir「另一個文件夾」

.*_2017101109[0-9]{4}_.*\.gz - 正則表達式模式匹配包含所需序列的所有文件名。

  • .* - 匹配任何字符(多個)

  • _2017101109 - 匹配的關鍵數值序列(<year><month><day><hours>

  • [0-9]{4}_ - 確保如果接着4位該點處,上述序列到<minutes><seconds>

  • \.gz - 確保文件擴展名爲.gz

+0

這很棒,謝謝!只是一個小問題。我知道這個命令在當前目錄中搜索文件。你使用了「-regextype posix-egrep」,所以你可以使用擴展的正則表達式,但是我不太瞭解你在正則表達式中使用的正則表達式。你能解釋一下嗎? –

+1

@DragosCazangiu,歡迎,你有我的解釋 – RomanPerekhrest

+0

非常感謝! –