windows下定期清理超過一定時間的文件

windows下定期清理超過一定時間的文件

背景

linux下當我們想定期清理超過7天無修改的日誌或備份文件,可以通過以下命令來完成:

find $path -type f  -mtime|-ctime +7 -exec rm -f {} \;

windows下的find命令,看起來遠沒有linux下這個強大:

C:\Documents and Settings\qunyingliu>find /?
Searches for a text string in a file or files.

FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]

  /V         Displays all lines NOT containing the specified string.
  /C         Displays only the count of lines containing the string.
  /N         Displays line numbers with the displayed lines.
  /I         Ignores the case of characters when searching for the string.
  /OFF[LINE] Do not skip files with offline attribute set.  "string"   Specifies the text string to find.
  [drive:][path]filename
             Specifies a file or files to search.

If a path is not specified, FIND searches the text typed at the prompt
or piped from another command.

那要怎麼才能完成定時清理超過一定時間的文件,莫非真的要等磁盤告警後人工去處理嗎?

找外援,找內助

俗話說,開發靠 Google,運維靠 Baidu,讓我們也google一次,發現了一個很有用的windows 命令行,FORFILES。

FORFILES命令的幫助信息:
FORFILES [/P pathname] [/M searchmask] [/S]         [/C command] [/D [+ | -] {yyyy/MM/dd | dd}]

描述:
選擇一個文件(或一組文件)並在那個文件上執行一個命令。

參數列表:

    /P    pathname      表示開始搜索的路徑。默認文件夾是當前工作的
                        目錄 (.)。
    /M    searchmask    根據搜索掩碼搜索文件。默認搜索掩碼是 '*'。
    /S                  指導 forfiles 遞歸到子目錄。像 "DIR /S"。
    /C    command       表示爲每個文件執行的命令。命令字符串應該
                        用雙引號括起來。
                        默認命令是 "cmd /c echo @file"。下列變量
                        可以用在命令字符串中:                        @file    - 返回文件名。                        @fname   - 返回不帶擴展名的文件名。                        @ext     - 只返回文件的擴展名。                        @path    - 返回文件的完整路徑。                        @relpath - 返回文件的相對路徑。                        @isdir   - 如果文件類型是目錄,返回 "TRUE";
                                   如果是文件,返回 "FALSE"。                        @fsize   - 以字節爲單位返回文件大小。                        @fdate   - 返回文件上一次修改的日期。                        @ftime   - 返回文件上一次修改的時間。
                        要在命令行包括特殊字符,字符請以 0xHH
                        形式使用十六進制代碼(例如,0x09 爲 tab)。
                        內部 CMD.exe 命令前面應以 "cmd /c" 開始。
    /D    date          選擇文件,其上一次修改日期大於或等於 (+),
                        或者小於或等於 (-) 用 "yyyy/MM/dd" 格式指定的日期;
                        或選擇文件,其上一次修改日期大於或等於 (+)
                        當前日期加 "dd" 天,或者小於或等於 (-) 當前
                        日期減 "dd" 天。有效的 "dd" 天數可以是                        0 - 32768 範圍內的任何數字。如果沒有指定,                        "+" 被當作默認符號。
    /?                  顯示此幫助消息。

問題解決

根據forfiles文件的說明,我們需要刪除x:\xxxx目錄下超過7天的所有文件,那麼命令如下:

forfiles /P x:\xxxx  /S /C "cmd /c del @path" /D -7

當然由於我要刪除的x:\xxxx沒有子目錄,也不需要保留,所以找到7天前的文件都可以刪除,如果是需要保留子目錄那就要指定/M後面的參數,比如 /M "*.sql" 刪除所有找到的超過七天的.sql結尾的文件。

51cto博客一般只會記錄一些運維的事情,編輯器不支持markdown。

歡迎來簡書來聽我吹牛聊馬拉松聊生活,http://www.jianshu.com/users/0158c185ef40。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章