Linux
為什麼 find 不排除舊文件?
我想從不到 43 天前創建的 apache 日誌中複製所有 gzip 文件。
作為測試,我只是從 find 中列出了我的文件:
sudo find /var/log/apache2/ -mindepth 1 -ctime -43 -name "*.gz" -ls
但結果包括一直到 8 月(設置伺服器時)創建的文件以及較新的文件:
8781890 4 -rw-r----- 1 root adm 186 Aug 10 06:44 /var/log/apache2/error.log.13.gz 8781923 4 -rw-r----- 1 root adm 1717 Aug 17 06:29 /var/log/apache2/error.log.12.gz stat /var/log/apache2/error.log.13.gz File: `/var/log/apache2/error.log.13.gz' Size: 186 Blocks: 8 IO Block: 4096 regular file Device: 807h/2055d Inode: 8781890 Links: 1 Access: (0640/-rw-r-----) Uid: ( 0/ root) Gid: ( 4/ adm) Access: 2014-11-13 10:34:14.444059675 +1030 Modify: 2014-08-10 06:44:11.000000000 +0930 Change: 2014-11-09 06:29:48.035930468 +1030
為什麼 ctime 參數不適用?
這些文件被輪換了,在這個過程中他們的 ctime 發生了變化。每次您
touch
創建文件或更改其內容時,您都將修改它的時間戳,這將覆蓋舊的時間戳。這會誤導您的 find 命令。
ls
列表顯示mtime
;因為這是 ls 預設顯示的內容,除非-c
指定 (ctime) 標誌所以本質上;您的ctime 條件與文件匹配,並且ls 顯示 mtime。
因此,嘗試將您的 find 命令調整為類似
sudo find /var/log/apache2/ -mindepth 1 -mtime -43 -name “*.gz” -ls
它應該可以按您的預期工作