我使用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中。 –