以修改时间倒序列出超过一天的文件
Listing files that are older than one day in reverse order of modification time
为了在目录上编写清理脚本,我需要查看所有早于一天的文件。另外,我需要按照修改时间的倒序删除它们(最早的在前),直到达到指定的大小。
我采用以下方法列出文件:
find . -mtime +1 -exec ls -a1rt {} +
我说的对吗,这不适用于大量文件(因为将执行多个 'ls')?在那种情况下我怎样才能实现我的目标?
这是一个 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;
}
}
}
您可以使用以下命令查找最旧的 10 个文件:
find . -mtime +1 -type f -printf '%T@ %p\n' | sort -n | head -10 | awk '{print }'
使用的步骤:
- 对于
find
返回的每个文件,我们打印修改时间戳和文件名。
- 然后我们按时间戳进行数字排序。
- 我们先拿10个。
- 我们只打印文件名部分。
以后如果要删除它们,可以执行以下操作:
rm $(...)
其中 ... 是上述命令。
为了在目录上编写清理脚本,我需要查看所有早于一天的文件。另外,我需要按照修改时间的倒序删除它们(最早的在前),直到达到指定的大小。
我采用以下方法列出文件:
find . -mtime +1 -exec ls -a1rt {} +
我说的对吗,这不适用于大量文件(因为将执行多个 'ls')?在那种情况下我怎样才能实现我的目标?
这是一个 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;
}
}
}
您可以使用以下命令查找最旧的 10 个文件:
find . -mtime +1 -type f -printf '%T@ %p\n' | sort -n | head -10 | awk '{print }'
使用的步骤:
- 对于
find
返回的每个文件,我们打印修改时间戳和文件名。 - 然后我们按时间戳进行数字排序。
- 我们先拿10个。
- 我们只打印文件名部分。
以后如果要删除它们,可以执行以下操作:
rm $(...)
其中 ... 是上述命令。