如何在命令行上删除超过 7 天的文件夹和文件?

如何在命令行上删除超过 7 天的文件夹和文件?

我想使用命令行删除文件夹及其创建时间超过 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

请注意以下要求:

  1. 仅删除带有“ChangesLog.txt”的目录,因为不应删除其他旧目录。
  2. 调用操作系统命令直接使用 cygwin,因为否则它会使用 Windows 默认命令。
  3. 将要删除的目录收集到外部文本文件中,以便保存查找结果,因为有时查找过程会挂起。
  4. 设置使用查找进程超时,后台进程将在 100 秒后被终止
  5. 按删除优先级,对最旧的目录进行排序。

相关内容