Rsync

我如何操縱 find 命令來“找到”“找到”文件所在的目錄?

  • March 11, 2014

所以我正在嘗試使用該find命令來查找我係統中的所有文件mtime -x。它會這樣做,但不會“找到”文件的目錄。

find . -mtime -2 -exec rsync -av {} /destination/ \;

我想如果可以的話,我是否可以帶來它會提供給它們的所有目錄,所以我嘗試了:

rsync -a -f"+ */" -f"- *" source/ destination/

這對於引入目錄樹很有魅力,但是當我嘗試將文件拉入其中時,它們不會進入單獨的目錄,它們只是溢出到我將它們複製到的主目錄中。

有什麼想法可以讓我獲得find找到目錄的命令或解決此問題的其他方法嗎?

這個命令行有兩個問題:

`find . -mtime -2 -exec rsync -av {} /destination/ ;``

傳輸路徑名稱

首先,當給(單個)文件名rsync而不是簡單的目錄時,必須明確告訴它使用整個路徑,而不僅僅是目標的文件名。為此,請使用選項-R。從手冊頁到 rsync(1):


> -R,--相對
>  使用相對路徑。這意味著在
>  命令行被發送到伺服器,而不僅僅是最後的部分
>  的文件名。這在您要發送時特別有用
>  同時有幾個不同的目錄。例如,如果您
>  使用了這個命令:
> 
>  rsync -av /foo/bar/baz.c 遠端:/tmp/
> 
>  ...這將在遠端機器上的 /tmp/ 中創建一個名為 baz.c 的文件。
>  相反,如果您使用
> 
>  rsync -avR /foo/bar/baz.c 遠端:/tmp/
> 
>  然後將在遙控器上創建一個名為 /tmp/foo/bar/baz.c 的文件
>  機器,保留其完整路徑。這些額外的路徑元素是
>  稱為“隱含目錄”(即“foo”和“foo/bar”
>  上例中的目錄)。
>  [...]
> 

然後手冊頁繼續介紹如何操作路徑,以便只有部分路徑出現在接收端,但這超出了這裡的範圍。

只搜尋文件,不搜尋目錄

其次,find如上呼叫不僅會報告文件,還會報告目錄。當一個目錄名被指定rsync為源時,它會將整個目錄同步到目標。這可以通過-type ffind. 但是請注意,這不僅會排除目錄,還會排除套接字、命名管道、塊和字元設備以及符號連結。對於符號連結,您可以改用該-xtype參數,它將檢查符號連結目標的類型。

解決方案

因此,修改後的命令行如下所示:

find . **-type f** -mtime -2 -exec rsync -av **-R** {} /destination/ \;

這將在目前路徑 ( ) 中的find所有文件 ( ) 在過去兩天 ( ) 內被修改,並且對於每個文件:執行 ( ) ,將具有給定名稱 ( ) 的文件複製到,保留大多數屬性 ( ),給出詳細輸出 ( ) 並在目的地 ( ) 再現整個路徑。-type f``.``-mtime -2``-exec``rsync``{}``/destination/``-a``-v``-R

引用自:https://serverfault.com/questions/581243