1. 程式人生 > >Linux/Unix 怎樣找出並刪除某一時間點的檔案(轉)

Linux/Unix 怎樣找出並刪除某一時間點的檔案(轉)

在Linux/Unix系統中,我們的應用每天會產生日誌檔案,每天也會備份應用程式和資料庫,日誌檔案和備份檔案長時間積累會佔用大量的儲存空間,而有些日誌和備份檔案是不需要長時間保留的,一般保留7天內的檔案即可,那麼我們怎麼找出並刪除7天前產生的日誌檔案和備份檔案並將其刪除呢?

    Linux/Unix提供了find 作業系統命令,使用該命令可以實現我們的目標。

    $man find 可以檢視find命令的使用方法。

    1. 找出 n 天前的檔案

    $find /temp/ -type f -mtime +n -print

    注:/temp/ 指出尋找/temp/目錄下的檔案

        -type f 指出找系統普通檔案,不包含目錄檔案

        -mtime +n 指出找 n*24 小時前的檔案

        -print 將找出的檔案打印出來

     如:找出 7 天前的檔案

     $find /temp/ -type f -mtime +7 -print

     找出 3 天前的檔案

     find /temp/ -type f -mtime +3 -print

    2. 找出並刪除 7 天前的檔案

    $find /temp/ -type f -mtime +7 -print -exec rm -f {} \;

    注:-exec 指出要執行後面的系統命令

        rm -f 刪除找出的檔案

        {} 只有該符號能跟在命令後面

         \ 結束符

    3. 也可以使用 xargs 代替 -exec

    $find /temp/ -type f -mtime +7 -print | xargs rm -f

    find命令用途舉例:

    如:

    * 查詢/var下最大的前10個檔案:

  $ find /var -type f -ls | sort -k 7 -r -n | head -10

  * 查詢/var/log/下大於5GB的檔案:

  $ find /var/log/ -type f -size +5120M -exec ls -lh {} \;

  * 找出今天的所有檔案並將它們拷貝到另一個目錄:

  $ find /home/me/files -ctime 0 -print -exec cp {} /mnt/backup/{} \;

  * 找出所有一週前的臨時檔案並刪除:

  $ find /temp/ -mtime +7-type f | xargs /bin/rm -f

  * 查詢所有的mp3檔案,並修改所有的大寫字母為小寫字母:

    $ find /home/me/music/ -type f -name *.mp3 -exec rename 'y/[A-Z]/[a-z]/' '{}' \;