【问题标题】:Listing files that are older than one day in reverse order of modification time按修改时间倒序列出超过 1 天的文件
【发布时间】:2015-03-17 14:47:15
【问题描述】:

为了在目录上编写清理脚本,我需要查看所有超过一天的文件。此外,我需要按照修改时间的相反顺序(最旧的在前)删除它们,直到达到指定的大小。

我提出了以下列出文件的方法:

find . -mtime +1 -exec ls -a1rt {} +

我说得对吗,这不适用于大量文件(因为将执行多个“ls”)?在这种情况下,我该如何实现我的目标?

【问题讨论】:

    标签: bash find ls


    【解决方案1】:

    您可以使用以下命令查找 10 个最旧的文件:

    find . -mtime +1 -type f -printf '%T@ %p\n' | sort -n | head -10 | awk '{print $2}'
    

    使用的步骤:

    • 对于find 返回的每个文件,我们都会打印修改时间戳以及文件名。
    • 然后我们按时间戳进行数字排序。
    • 我们先拿 10 个。
    • 我们只打印文件名部分。

    稍后如果您想删除它们,您可以执行以下操作:

    rm $(...)
    

    其中 ... 是上述命令。

    【讨论】:

      【解决方案2】:

      这是一个 perl 脚本,您可以使用它首先删除给定目录中最旧的文件,直到目录中文件的总大小减小到给定大小:

      &CleanupDir("/path/to/directory/", 30*1024*1024);  #delete oldest files first in /path/to/directory/ until total size of files in /path/to/directory/ gets down to 30MB
      
      sub CleanupDir {
        my($dirname, $dirsize) = @_;
        my($cmd, $r, @lines, $line, @vals, $b, $dsize, $fname);
      
        $b=1;
        while($b) {
          $cmd="du -k " . $dirname . " | cut -f1";
          $r=`$cmd`;
          $dsize=$r * 1024;
      
          #print $dsize . "\n";
      
          if($dsize>$dirsize) {
            $cmd=" ls -lrt " . $dirname . " | head -n 100";
            $r=`$cmd`;
            @lines=split(/\n/, $r);
            foreach $line (@lines) {
              @vals=split(" ", $line);
              if($#vals>=8) {
               if(length($vals[8])>0) {
                  $fname=$dirname . $vals[8];
                  #print $fname . "\n";
                  unlink $fname;
                }
              }
            }
          } else {
             $b=0;
          }
        }
      }
      

      【讨论】:

      • 注意:这将一次删除 100 个文件。您可能希望在 ls ... | 中增加或减少此数字。头..命令酌情。此外,如果文件名包含空格或各种符号,此脚本可能无法正常工作。
      猜你喜欢
      • 2020-12-18
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 2016-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多