Linux 板


LINE

※ 引述《zchien (小建)》之銘言: : 請教..如果我有很多資料夾...分別要複製到不同目的地 : 因為檔案數量太多...因為我系統沒有rsync...如果不使用rsync : 如果我只希望複製新增加的資料....我是否有機會使用find 指令..建立清單之後... : 使用跑回圈的方式...依序丟到指定的不同資料夾..... 因為不是非常清楚你說的需求,所以, 我先假定你 "新增加資料" 的資料夾,與想要複製過去的 "不同" 目的地, 有一對一的對應關係... 建立一個路徑參考檔 path.lst,如下: source1:destination1 source2:destination2 source3:destination3 以上檔案中,將所有來源目錄與目的目錄,分別用擔一行寫好, 其之間用 ":" 作分隔,要注意 ":" 前後沒有空白, 最後檔案尾端要有一行新行 (new line)。 然後作一個 script 檔名為 cpr: #!/bin/bash ReferenceFile=ReferenceFile.rf if [ ! -e $ReferenceFile ]; then touch $ReferenceFile exit fi cat $1 | while read line; do SourcePath=`echo $line | cut --delimiter=":" --fields=1` DestinationPath=`echo $line | cut --delimiter=":" --fields=2` find $SourcePath -newer $ReferenceFile -exec cp -av {} $DestinationPath \; done touch $ReferenceFile 這個 script 的關鍵是: 他會檢查一個參考檔是否存在,也就是 "ReferenceFile.rf",不存在會自己建立。 這個 script 第一次執行時,會建立這個檔案,然後什麼也不做的離開, 但是這個檔案的建立日期時間,將被用來作為檢查你所謂 "新資料"。 ~$ ./cpr 換句話說,自從第一次執行後,在你來源路徑中所累積的 "新資料", 將會被後面的 find 找到,然後更進一步被複製到你所指定的目的地去。 並且每次複製之後,會更新一次參考檔的檔案日期時間, 用來檢查下一次累積的 "新資料"。 所以爾後,你只要想進行複製最新資料: ~$ ./cpr path.lst 這樣看看是否符合你的需求,不行的話,再拿去按自己的喜好修改吧。 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.240.167.99 ※ 編輯: SeamusBerloz 來自: 123.240.167.99 (08/24 05:04)
1F:推 Zoxge:感謝您 08/24 09:22
2F:推 zchien:感謝你...但你這list是人為建立的...我希望是否有機會 08/24 18:11
3F:→ zchien:是用find出來結果建立 08/24 18:12
4F:→ zchien:例如: find /home/test/* -name "*" -mtime -1 去建立清單 08/24 18:15
5F:→ zchien:再將檔案複製到 /home/backup/目錄 ..來源和目的的差異... 08/24 18:16
6F:→ zchien:只在來源資料夾是/home/test開頭..目的是/home/backup開頭 08/24 18:17
7F:→ zchien:但是test和backup的資料夾名..都是變數... 08/24 18:18
其實,只要知道來源路徑與目的路徑之間的關係,或者邏輯能推導出來 就應該不是問題,省去手動建立清單的困擾。 我仔細看了幾遍你的貼文,你好像沒說複製來的檔案在 /home/backup 下要怎樣擺放, 所以這裡我還是假定,按照你原來在 /home/test... 中的原始樹狀結構去擺放啦~ 好好培養自己分解問題,是成功的關鍵。依照你的想法思路,程式結構將是: Step1.使用 find 自動建立清單,但務必加以整形,才方便迴圈敘述繼續接手處理。 Step2.迴圈敘述處理所建立的清單項目(其實就是依序處理每一個檔案的完整路徑)。 Step3.分解路徑字串,擷取路徑位置,準備用來建立目的地資料夾。 Step4.如果目的地資料夾不存在,就建立,已經存在就跳過。 Step5.實際的檔案複製 (擺放到 Step4. 建立的資料夾去), Step6.重複 Step3. 到 Step5. 直到清單結束。 後面你又提到,test 和 backup 其實都是變數,我不是很懂什麼意思, 也許你想要自己隨定義變動這些以 /home/test... 和 /home/backup 的路徑, 所以,何不就乾脆,想搞哪個資料夾、就搞哪個資料夾... << 檔案 cpr2 >> #!/bin/bash # 建立檔案清單,靠 awk 整形 FullPathFileList=`find $2/* -mtime $1 | awk '{ printf($1" ") }'` # 運作迴圈 for FullPathFile in $FullPathFileList; do # 分解字串,獲得檔案所在路徑 PathName=${FullPathFile%\/*} # 持續分解,消除來源路徑部份路徑段 PathName=${PathName#$2} # 拼湊目的路徑 (資料夾) DestinatiionDirectory=$3$PathName # 如果目的路徑資料夾本來就不存在,建立之 if [ ! -e $DestinatiionDirectory ]; then echo Make directory: [$DestinatiionDirectory] mkdir -p $DestinatiionDirectory fi # 實際的複製動作 echo Copy file: [$FullPathFile] cp -a $FullPathFile $DestinatiionDirectory done # 檔案結束 然後: ~$ cpr2 <find 的 mtime 時間參數> <來源路徑> <目的路徑> ~$ cpr2 -1 /home/test /home/backup 再次真心強力建議,若真的覺得不好用,有問題,那就進一步去修改他, 若真的好用,也不要放著光用,去對照、去查書、去知道為什麼要這樣寫, 讓他去符合自己將來更多地方應用的場合,多多參考,寫出好東西是很容易的。 ※ 編輯: SeamusBerloz 來自: 123.240.167.99 (08/25 03:52)
8F:推 zchien:謝謝你的幫忙...我研究研究 08/28 00:01







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP