2016-04-15 87 views
2

所有文件都駐留在一個文件夾中。文件名看起來像如下:基於文件名中的時間戳值複製文件

1695_6892_00000_20160321235959.file.name.csv.gz 

第三子(第二_後)是時間戳。

如何將所有帶有timestamp < 20150531000000的文件複製到另一個文件夾my_folder

回答

3

試試這個:

for i in *.gz; do test `echo $i | cut -d _ -f 3` -lt 20150531000000 && cp $i my_folder; done 
+0

謝謝朱利安:) – Dennis

+0

@Dennis不客氣。 :) –

+2

Upvote不使用'ls',而是正確使用shell通配符。 – tripleee

0

而且......您可以用awk。

for i in $(ls -1 org_folder | awk -F"_" '{ if ($3 < 20150531000000) print $0 }'); cp mv org_foler/$i my_folder/; done 
+0

只是一個fyi:除了當你在看它時,ls不需要-1。 ls知道什麼時候沒有被顯示,並且不在列中格式化 – tomc

+1

@tomc @ han056不要使用'ls'輸出來做任何事情。 'ls'是交互式查看目錄元數據的工具。用代碼解析'ls'輸出的任何嘗試都被破壞。 Globs更加簡單且正確: '用於* .txt'中的文件。閱讀[Parsing ls](http://mywiki.wooledge.org/ParsingLs) –

+0

IC非常感謝您的建議 – han058

-1

ls | awk -F'_' '$3<20150531000000{print}' 應該是你要移動的文件,所以 for f in "$(ls|awk -F'_' '$3<20150531000000{print}')"; do mv "${f}" elsewhere/ ;done

相關問題