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。