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

时间:2017-06-29 09:33:07

标签: bash macos unix

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

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

到目前为止,我已经了解了bash的基本知识,在给定的日子里你可以使用以下命令:

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

问题是如何在该时间段的几个日期执行此操作?

此外,一旦我能弄明白,我想我可以将其复制到另一个文件夹。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:0)

Perl救援:

#!/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);

File::Find以递归方式遍历给定目录。对于每个文件,它运行给定的代码:它检索其修改时间,从中创建Time::Piece对象,并检查其时间是否与范围相对应。

答案 1 :(得分:0)

您可以使用以下内容:

#!/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

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

答案 2 :(得分:0)

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