我想使用命令行删除文件夹及其创建时间超过 7 天的文件。
答案1
*不适用
如果你正在使用 *nix 并且寻找可用这个应该可以解决问题:
find /the/directory/containing/files/to/delete -mtime +7 -exec rm -r {} \;
该标志-mtime
用于检查找到的文件的修改时间戳。如果超过7*24h
,
它将执行rm /path/to/file
来自手册页find
-mtime n
File's data was last modified n*24 hours ago. See the comments
for -atime to understand how rounding affects the interpretation
of file modification times.
Windows XP 和 Vista
我从来没有在 Windows 上工作过,但我很好奇在 MS-DOS 环境中什么命令与上述命令等效。我发现批处理文件删除超过 N 天的文件在 stackoverflow 上。
相关命令(从之前链接的线程复制粘贴):
forfiles -p "C:\what\ever" -s -m *.* -d <number of days> -c "cmd /c del @path"
WINDOWS 7的
语法略有改变,因此更新的命令是
forfiles -p "C:\what\ever" -s -m *.* /D -<number of days> /C "cmd /c del @path"
答案2
如果你需要处理非常大的文件树(在我的情况下是许多 perforce 分支)上的空间限制问题,有时跑步时被吊死查找和删除过程 -
这是我每天安排的脚本查找包含特定文件的所有目录(“ChangesLog.txt”),然后对所有目录进行排序发现年长过2 天,并删除第一个匹配的目录(每个计划可能有一个新的匹配):
bash -c "echo @echo Creating Cleanup_Branch.cmd on %COMPUTERNAME% - %~dp0 > Cleanup_Branch.cmd"
bash -c "echo -n 'bash -c \"find ' >> Cleanup_Branch.cmd"
rm -f dirToDelete.txt
rem cd. > dirToDelete.txt
bash -c "find .. -maxdepth 9 -regex ".+ChangesLog.txt" -exec echo {} >> dirToDelete.txt \; & pid=$!; sleep 100; kill $pid "
sed -e 's/\(.*\)\/.*/\1/' -e 's/^./"&/;s/.$/&" /' dirToDelete.txt | tr '\n' ' ' >> Cleanup_Branch.cmd
bash -c "echo -n '-maxdepth 0 -type d -mtime +2 | xargs -r ls -trd | head -n1 | xargs -t rm -Rf' >> Cleanup_Branch.cmd"
bash -c 'echo -n \" >> Cleanup_Branch.cmd'
call Cleanup_Branch.cmd
请注意以下要求:
- 仅删除带有“ChangesLog.txt”的目录,因为不应删除其他旧目录。
- 调用操作系统命令直接使用 cygwin,因为否则它会使用 Windows 默认命令。
- 将要删除的目录收集到外部文本文件中,以便保存查找结果,因为有时查找过程会挂起。
- 设置使用查找进程超时,后台进程将在 100 秒后被终止。
- 按删除优先级,对最旧的目录进行排序。