Find
使用 cp 開關複製特定日期後修改的文件
當我執行命令時,
find . -mtime -60
我會得到過去 60 天內修改的文件列表。所以當我執行時,
find . -mtime -60 -exec cp {} /tmp/1 \;
我可以將這些文件複製到一個新目錄進行處理但是,如果我想保留時間戳,則無法僅複製執行時所需的文件
find . -mtime -60 -exec cp -LR --preserve=timestamps {} /tmp/2 \;
最終發生的是源目錄中的所有文件都被複製,而不僅僅是我需要的文件。
這裡有什麼解決辦法嗎?
這裡發生的是,當您使用
-R
選項cp
並將目錄作為參數提供時,它會複製該目錄中的所有內容。此外,這不會保留目錄結構,因為較低目錄中的任何文件都將直接複製到/tmp/2
. 這可能是您想要的(有關如何以這種方式執行此操作,請參閱X Tian 的回答),但請注意,如果任何文件具有相同的名稱,則其中一個文件會在指定位置覆蓋另一個文件。要保留目錄結構,您可以使用
cpio
:find . -mtime -60 -print0 | cpio -0mdp /tmp/2
如果
-0
(或等效)選項不可用,您可以這樣做,但請注意您的文件名中沒有一個包含換行符:find . -mtime -2 | cpio -mdp /tmp/2
cpio
也應該支持該-L
選項,但要小心這一點,因為在某些情況下它可能會導致無限循環。