2013-12-12 97 views
1

我有大約1000個文件(它們不是.txt,但它們確實包含文本),我想根據文件內容的特定部分移動到子目錄中。每行包含一個或多個字符串副本基於文本內容移動文件

DTM+137:20131001 

其中最後八位數字是日期。我想用上面的字符串將一個文件移動到名爲\01.10.2013\的子文件夾。用正則表達式找到字符串很容易,但我沒有足夠的經驗來使任何語言都能正常工作。我嘗試過使用Perl,但是我並沒有走得太遠。

+0

爲什麼不使用'grep'?您可以使用'grep -l'DTM + 137獲得文件名列表:20131001'*' – TLP

+0

「每行包含一個或多個字符串副本」文件中的所有字符串是否具有相同的日期,例如, 20131001? – Kenosis

回答

1

如果你有一個像

$line = "DTM+137:20131001"; 

一個字符串,你可以從中提取的月,日和年用分組的正則表達式是這樣的:

($year, $month, $day) = $line =~ /:(\d\d\d\d)(\d\d)(\d\d)$/; 

一旦你擁有了這些,你可以使用他們建立一個新的目錄名稱:

$new_folder = sprintf("/some/directory/%02d.%02d.%04d", $day, $month, $year); 

以防萬一創建新的目錄:

mkdir 0755, $new_folder; 

,並使用rename調用移動的文件有:

rename $file, "$new_folder/$file"; 

這可能需要爲您的具體問題進行一些調整,但它應該幫助您開始。