2015-04-03 40 views
2

結果在UNIX bash中,我得到文件,發現結果如下:的Unix - 過濾找到的文件名

find . -regextype posix-egrep -iregex "./[0-9]{8}/exp/RESULT.out"| sort 

./20150128/exp/RESULT.out 
./20150210/exp/RESULT.out 
./20150218/exp/RESULT.out 
./20150224/exp/RESULT.out 
./20150318/exp/RESULT.out 
./20150327/exp/RESULT.out 
./20150330/exp/RESULT.out 

是否有可能由一個日期YYYYMMDD日期字符串,這樣我可以過濾這些結果只有指定日期之前的文件?

例如爲20150224,我只希望得到

./20150128/exp/RESULT.out 
./20150210/exp/RESULT.out 
./20150218/exp/RESULT.out 
./20150224/exp/RESULT.out 

感謝您的幫助

回答

0

您可以使用此find命令:

export s='20150224' 

find . -regextype posix-egrep -iregex "./[0-9]{8}/exp/RESULT.out" -exec \ 
    bash -c 'IFS=/ read -ra arr <<< "$1"; ((${arr[1]} <= s)) && echo "$1"' - '{}' \; 
./20150128/exp/RESULT.out 
./20150210/exp/RESULT.out 
./20150218/exp/RESULT.out 
./20150224/exp/RESULT.out 
+0

感謝anubahava。 。但是如果我想將字符串'20150224'作爲變量傳遞給我呢?..不用說我是unix的新手。 – sunnyp101 2015-04-03 16:48:16

+0

這將不適用這種方法如果文件名有時間戳按照他們的名字,那麼你可以使用:'-newer'選項 – anubhava 2015-04-03 16:50:52

+0

我試過更新的選項,但問題是任何歷史文件可以在當前日期修改,然後更新會給出不正確的結果 – sunnyp101 2015-04-03 16:56:58

1

管的結果通過

awk -v FS=/ '$2<=20150224' 
+0

thx Vytenis爲一個緊湊的解決方案...由於我的新帳戶不能upvote – sunnyp101 2015-04-03 18:22:16