我希望能够根据格式为YYYYMMDDHH的给定时间戳,找到比该时间戳早N天的文件。
我可以使用以下命令查找早于2天的文件,但是这将查找现在的文件:
find /path/to/dir -mtime -2 -type f -ls
假设我输入
timestamp=2011093009
,我想找到早于2011093009两天的文件。一直在做研究,但似乎无法解决。
基本上,这是通过在一定日期范围内查找文件来完成的...
我使用perl计算从今天到给定时间戳的天数,因为我的系统中没有GNU日期,所以-d
不是一个选项。下面的代码接受格式为YYYYDDMM的日期。请参见以下内容:
#!/usr/bin/perl
use Time::Local;
my($day, $month, $year) = (localtime)[3,4,5];
$month = sprintf '%02d', $month+1;
$day = sprintf '%02d', $day;
my($currentYear, $currentDM) = ($year+1900, "$day$month");
my $todaysDate = "$currentYear$currentDM";
#print $todaysDate;
sub to_epoch {
my ($t) = @_;
my ($y, $d, $m) = ($t =~ /(\d{4})(\d{2})(\d{2})/);
return timelocal(0, 0, 0, $d+0, $m-1, $y-1900);
}
sub diff_days {
my ($t1, $t2) = @_;
return (abs(to_epoch($t2) - to_epoch($t1))) / 86400;
}
print diff_days($todaysDate, $ARGV[0]);
注意:我不是Perl专家,这是我修改/编写的第一段代码。话虽如此,我相信在Perl中有更好的方法来完成上述任务。
然后使用下面的korn脚本来执行我所需的操作。
#!/bin/ksh
daysFromToday=$(dateCalc.pl 20110111)
let daysOld=$daysFromToday+31
echo $daysFromToday "\t" $daysOld
find /path/to/dir/ -mtime +$daysFromToday -mtime -$daysOld -type f -ls
我正在查找所有早于+$daysFromToday
的文件,然后将搜索范围缩小到比-$daysOld
新的天数
#!/usr/bin/env bash
# getFiles arrayName olderDate newerDate [ pathName ]
getFiles() {
local i
while IFS= read -rd '' "$1"'[(_=$(read -rd "" x; echo "${x:-0}")) < $2 && _ > $3 ? ++i : 0]'; do
:
done < <(find "${4:-.}" -type f -printf '%p\0%Ts\0')
}
# main date1 date2 [ pathName ]
main() {
local -a dates files
local x
for x in "${@:1:2}"; do
dates+=( "$(date -d "$x" +%s)" ) || return 1
done
_=$dates let 'dates[1] > dates && (dates=dates[1], dates[1]=_)'
getFiles files "${dates[@]}" "$3"
declare -p files
}
main "$@"
# vim: set fenc=utf-8 ff=unix ts=4 sts=4 sw=4 ft=sh nowrap et:
find
的路径名。 getFiles
以数组名称为参数,并将两个日期之间的mtimes的文件分配给该数组。此示例脚本仅打印该数组。printf'%(%s)T'...
进行一些算术计算来计算偏移量的天数,但是无法在没有GNU日期的情况下从时间戳获取基础日期,所以恐怕你没有办法。-d
不是一个选项...但是,经过更多的研究,我已经找到了我的问题的答案。您可以查看我的被接受的答案。 - esausilvaexpr
已经过时了 ;) date=2011060109; find /home/kenjal/ -mtime $(( $(date +%Y%m%d%H) - $(date -d $date +%Y%m%d%H) ))
- Gilles Quénot
/path/to/dir
目录下的所有文件。 - esausilvafind /path/to/dir -mtime +2 -type f -ls
吗?我尝试了一下,在我的系统(xubuntu,bash)中,-mtime
的-2
选项会找到比两天新的文件。 - jhonkola