Find

使用 cp 開關複製特定日期後修改的文件

  • July 29, 2016

當我執行命令時,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選項,但要小心這一點,因為在某些情況下它可能會導致無限循環。

引用自:https://unix.stackexchange.com/questions/118521