随着时间的推移,日积月累,服务器上会产生很多缓存和临时文件等,如果手动去删除显然是不方便也是不合理的,还容易导致误删文件。Windows平台下有一个 Forfiles
命令可以很轻松地帮我们再完成这项任务。
比如,当前需要删除位于 D:\TempFiles
目录下的半年前的所有文件,直接在命令行执行:
$ forfiles /p D:\TempFiles /s /m * /d -180 /c "cmd /c del @path"
参数说明
forfiles [/p <Path>] [/m <SearchMask>] [/s] [/c "<Command>"] [/d [{+|-}][{<Date>|<Days>}]]
/p <Path>
表示开始搜索的路径。默认文件夹是当前工作的目录 (.)
/m searchmask
根据 searchmask 指定的搜索通配符来搜索文件。默认搜索掩码是 ‘*
‘。
/s
指示 forfiles 在子目录中搜索,类似dir /s
。
/C command
为每个匹配到的对象执行命令。带空格命令字符串需用双引号括起来。默认命令是"cmd /c echo @file"
。 命令字符串中可使用变量:
`@file` - 返回文件名(仅文件名)。
@fname
- 返回不带扩展名的文件名。
@ext
- 只返回文件的扩展名。
@path
- 返回文件的完整路径(包含文件名)。
@relpath
- 返回文件的相对路径。
@isdir
- 如果文件类型是目录,返回 “TRUE”;如果是文件,返回 “FALSE”。
@fsize
- 以字节为单位返回文件大小。
@fdate
- 返回文件上一次修改的日期。
@ftime
- 返回文件上一次修改的时间。
/d
使用方法:/d[{+ | -}] [{MM/DD/YYYY | DD}]
+ | -
选择日期大于或等于 (+)或者小于或等于 (-)指定日期的文件
MM/DD/YYYY
指定的日期
DD
当前日期减去或者相加后的时间,有效范围0 - 32768
,比如示例中的半年前就是/d -180
特别说明
要在命令行包括特殊字符,字符请以 0xHH
形式使用十六进制代码(例如,0x09
为tab
)。调用内部 CMD.exe
命令前面应以 “cmd /c
“ 开始。
示例
列出当前目录(.)的
exe
文件$ forfiles /p . /s /m *.exe /c "cmd /c echo @file is a exe file"
如果是目录就显示目录名,如果是文件就文件名,else 条件可以去掉,只要 if
$ forfiles /p E:\workspace /s /m * /c "cmd /c if @isdir==TRUE (echo @file is a directory) else (echo @path)"
显示超过 30 天的 txt 文件
$ forfiles /p E:\workspace /s /m *.txt /d -30 /c "cmd /c echo @file"
指定日期前(-)创建的文件,之后使用“+”
$ forfiles /p E:\workspace /s /m *.* /d -06/02/2018 /c "cmd /c echo @file"
显示符合条件文件扩展名
$ forfiles /p E:\workspace /s /m *.* /d -06/02/2018 /c "cmd /c echo Extension of @file is @ext"