Bash:如何查找当前周修改的文件

时间:2018-05-04 12:34:06

标签: bash

如何查找本周(不是过去7天)内修改的文件 - 本周除当前日期外?例如,如果今天是星期三,我们需要找到星期二和星期一的修改过的文件。

过去7天(目前不包括)我可以使用:

find . -name "name_pattern" -mtime +1 -mtime -7

但是,我不知道如何在本周的日子里这样做,而不仅仅是最后一天。

3 个答案:

答案 0 :(得分:1)

也许这会有所帮助?

for i in {`date +"%u" -d "yesterday"`..1}; do
  date +"%A" -d "$i days ago";
  find . -mtime $i;
  echo "";
done

输出:

Monday

Tuesday
./.file3
./.file2
Wednesday

Thursday
./.file1
./.file2

答案 1 :(得分:1)

对于Linux,我们可以创建带有时间戳的临时文件。 本周不包括当天,它将是:

touch -t $(date +"%Y%m%d0000" -d "last mon") ./fromfile
touch -t $(date +"%Y%m%d0000" -d "now")      ./tofile
find . -name "pattern" -newer ./fromfile ! -newer ./tofile
rm ./fromfile ./tofile

在Solaris中,这可以通过一些额外的程序来完成,例如perl或python(Solaris中的date命令不会返回正确的答案):

perl -e 'use Time::Local; use POSIX strftime; 
         my $t=time(); 
         while (strftime("%u",localtime($t)) != 1){ $t -=24*60*60; }; 
         print strftime("%Y%m%d0000",localtime($t) ),"\n";'

此perl示例中的代码将与'date +“%Y%m%d0000”-d“last mon”'

相同

答案 2 :(得分:0)

一旦这样做是为了获得自上次星期一以来的天数。使用date命令:

echo $((($(date +%s) - $(date -d 'last mon' +%s))/60/60/24))

+%s返回自EPOCH时间以来的秒数。所以这个数字需要分成几天来。

然后您可以将其添加到您的命令中:

find . -name "name_pattern" -mtime +1 -mtime -$((($(date +%s) - $(date -d 'last mon' +%s))/60/60/24))