希望在几天内提取两次创建的文件



问题:我有一个包含超过一百万个文件的文件夹。每30分钟拍摄一次快照,并保存到该文件夹(在过去的几年中(

目标:我想取出每天在0800和1700之间创建的文件

到目前为止,我已经掌握了我对bash的基本知识,在给定的一天中,您可以使用以下命令:

find directory -type f -newermt "2016-11-23 08:00:00" ! -newermt "2016-11-23 17:00:00"

问题是,在那个时期我该如何做几个日期?

也可以弄清楚这一点,我想我可以将其副本复制到另一个文件夹。

任何帮助将不胜感激。

您可以使用:

#!/bin/bash
for ((i=1;i<=7;i++))
do
        dayte=$(date -d "2016-11-24-$i days" +%Y-%m-%d)
        find directory -type f -newermt "$dayte 08:00:00" ! -newermt "$dayte 17:00:00"
done

计数结束日期范围前的日子以制定循环。在此示例案例中,它将在2016-11-24之前的7天和2016-11-17到2016-11-24

perl to recue:

#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
use File::Find;
use Time::Piece;
$ENV{TZ} = 'Europe/Berlin';
find( sub {
    my $mtime = (stat)[9];
    my $tp = localtime->strptime($mtime, '%s');
    $tp = $tp + $tp->tzoffset;
    my $hour = $tp->hour;
    say $File::Find::name
        if $hour >= 8
        && ($hour < 17
            || $hour == 17 && $tp->min == 00 && $tp->sec == 00);
}, shift);

文件::查找递归遍历给定的目录。对于每个文件,它运行给定的代码:它检索其修改时间,从中创建一个时间:: pips对象,并检查其时间是否对应于范围。

a。创建文件

echo '#!/bin/bash
for i in $@
do
    find /source_dir -type f -newermt "$i 08:00:00" ! -newermt "$i 17:00:00" -exec cp {} /target_dir ;
done' > ffiles.sh

source_dir您需要设置您正在查找文件的目录,例如/home/user/snapshots/。而target_dir粘贴目录将您复制找到的文件。

b。设置权限以使脚本可执行:

$ chmod +x ffiles.sh

c。运行脚本,查找并复制创建的文件,从08:00到17:00。运行脚本时,将日期(或几个(指定为参数:

$ ./ffiles.sh 2016-11-23 2016-11-25

(或将此格式用于日期2016112320161125(

最新更新