问题: 我有一个包含超过一百万个文件的文件夹。每30分钟拍摄一次快照并保存到此文件夹(过去几年)
目标:我想在0800和1700之间取出每天创建的文件
到目前为止,我已经了解了bash的基本知识,在给定的日子里你可以使用以下命令:
find directory -type f -newermt "2016-11-23 08:00:00" ! -newermt "2016-11-23 17:00:00"
问题是如何在该时间段的几个日期执行此操作?
此外,一旦我能弄明白,我想我可以将其复制到另一个文件夹。
任何帮助都将不胜感激。
答案 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
(或将此格式用于日期20161123
,20161125
)