我使用rsync
将我们的卫星服务器的照片复制到主服务器中。所以执行它的脚本基本上是从PC连接到PC并执行rsync
。rsync只有年龄小于xy天的文件
我一直在尝试使用find来确定年龄小于xy天的文件(这将是天,但数量可能会有所不同)。使用--files-from=<()
指定文件,但在某些机器上命令find /var/dav/davserver/ -mtime -3 -type f -exec basename {} \;
非常慢,甚至使rsync超时。它们也是服务器,所以每隔几分钟运行一次这个命令会花费太多的处理器能力,我不想拿走它们。
第二个问题是利用我们存储这些文件的方式,在/var/dav/davserver/year/month/day/
目录下。然而,当我开始研究它时,我意识到我需要编写相当多的代码来处理几个月和几年的时间,甚至更多的时间不是固定的(可能超过31天,因此这个脚本可能需要运行几个月)。
所以我想知道是否没有一些更简单的方法如何实现这个没有杀死源PC处理器或写一个全新的库来照顾所有月/年结束?
编辑:
我已经准备脚本生成我的文件的路径。我所做的,就是我离开两个月处理端/年date
..
#!/bin/bash
DATE_now=`date +"%Y-%m-%d"`
DATE_end=`date -d "-$1 days" +"%Y-%m-%d"`
echo "Date now: $DATE_now | Date end: $DATE_end"
start_d=`date +%s`
end_d=`date -d "-$1 days" +%s`
synced_day=$DATE_now
synced_day_s=$start_d
daycount=1
echo "" > /tmp/$2_paths
while [ $synced_day_s -ge $end_d ]; do
DAY=$(date -d "$synced_day" '+%d')
MONTH=$(date -d "$synced_day" '+%m')
YEAR=$(date -d "$synced_day" '+%Y')
SYNC_DIR="/var/dav/davserver/$YEAR/$MONTH/$DAY/**"
echo "Adding day ($synced_day) directory: \"$SYNC_DIR\" to synced paths | Day: $daycount"
echo $SYNC_DIR >> /tmp/$2_paths
synced_day=$(date -d "$synced_day -1 days" +"%Y-%m-%d")
synced_day_s=$(date -d "$synced_day" +%s)
daycount=$((daycount+1))
done
,并使用它,不仅仅是提取所需的信息倒计时天。这个剧本给我目录列表进行rsync:
[email protected]:~/bash_devel$ bash date_extract.sh 8 Z00163
Date now: 2017-06-29 | Date end: 2017-06-21
Adding day (2017-06-29) directory: "/var/dav/davserver/2017/06/29/**" to synced paths | Day: 1
Adding day (2017-06-28) directory: "/var/dav/davserver/2017/06/28/**" to synced paths | Day: 2
Adding day (2017-06-27) directory: "/var/dav/davserver/2017/06/27/**" to synced paths | Day: 3
Adding day (2017-06-26) directory: "/var/dav/davserver/2017/06/26/**" to synced paths | Day: 4
Adding day (2017-06-25) directory: "/var/dav/davserver/2017/06/25/**" to synced paths | Day: 5
Adding day (2017-06-24) directory: "/var/dav/davserver/2017/06/24/**" to synced paths | Day: 6
Adding day (2017-06-23) directory: "/var/dav/davserver/2017/06/23/**" to synced paths | Day: 7
Adding day (2017-06-22) directory: "/var/dav/davserver/2017/06/22/**" to synced paths | Day: 8
[email protected]:~/bash_devel$ cat /tmp/Z00163_paths
/var/dav/davserver/2017/06/29/**
/var/dav/davserver/2017/06/28/**
/var/dav/davserver/2017/06/27/**
/var/dav/davserver/2017/06/26/**
/var/dav/davserver/2017/06/25/**
/var/dav/davserver/2017/06/24/**
/var/dav/davserver/2017/06/23/**
/var/dav/davserver/2017/06/22/**
[email protected]:~/bash_devel$
但是,现在,我使用这个列表的问题,我一直在试图使用--include
和--exclude
命令很多组合都--include-files
和--include-from
但我只获得2个结果:要么一切正在被rsynced,要么什么都没有。
Rsync有一个'--ignore-existing'选项,所以它只复制新文件。 – pikand
是的,但在卫星服务器上可能有大约3年的数据(在某些情况下)。不过,我只想在主服务器上只保存30天的数据。 – rRr
你可以先运行你的'find'命令,通过管道连接到一个文件,然后才启动'rsync'命令?甚至可以传送到'rsync'中。只是不在子shell中。 –