2012-12-12 37 views
3

我有計劃使用find給我一個比某些FILE早的文件列表,然後使用xargs(或-exec)將文件移動到其他位置。搬東西不是問題; | xargs mv {} ~/trash工作正常。在不包含FILE的情況下查找比FILE更早的文件

現在,如果我嘗試使用! -newer FILE,那麼FILE包含在列表中,我不想!

該命令參數的功能確實有道理邏輯,但是,因爲「未更新」很可能被解釋爲「相同或更舊」,喜歡這裏:

$ find . ! -newer Selection_008.png -exec ls -l {} \; 

包括從文件compare參數:

-rw-r--r-- 1 and and 178058 2012-09-24 11:46 ./Selection_004.png 
-rw-r--r-- 1 and and 16260 2012-09-21 11:25 ./Selection_003.png 
-rw-r--r-- 1 and and 38329 2012-10-04 17:13 ./Selection_008.png 
-rw-r--r-- 1 and and 177615 2012-09-24 11:53 ./Selection_005.png 

ls -l僅顯示用於說明目的日期)

我真正從需要是-older選項,但沒有在find(1)上市...

當然,一個可能只是管輸出通過grep -v,使用sed等,或利用環境變量重複使用的文件名(FX。爲grep -v),所以我可以享受DRY原則,比如

$ COMP=Selection_008.png find . ! -newer $COMP | grep -v $COMP | xargs ... 

,但它只是似乎是一個很大書寫了一段oneliner的,這是不是我所期待的。

有沒有比find更簡單的方法還是我錯過了一些選擇?我檢查了手冊頁和搜索谷歌和SO ...

回答

4

你可以試試這個:

find . ! -newer $COMP ! -name $COMP 
+0

這並不壞,它節省了管道。但是,這也使我輸入更多的東西,包括。設置env.var。我真的很想避免。當然,在一個腳本,這將是好的:) – dubberx

1

查找似乎並不支持這一點。因爲它運行爲每個文件叉

find . -exec test "{}" -ot "$COMP" \; -print 

不是非常有效:你可以委託測試test

4

這不是剛好-older,但! -samefile將排除一個特定的文件。

$ find . ! -newer Selection_008.png ! -samefile -exec ls -l {} \; 

這仍然會趕上一個文件完全一樣年齡的文件,因爲它是基於索引節點, 有可能是處理環節,以及注意事項。

相關問題