我如何操縱 find 命令來“找到”“找到”文件所在的目錄?
所以我正在嘗試使用該
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 f
對find
. 但是請注意,這不僅會排除目錄,還會排除套接字、命名管道、塊和字元設備以及符號連結。對於符號連結,您可以改用該-xtype
參數,它將檢查符號連結目標的類型。解決方案
因此,修改後的命令行如下所示:
find . **-type f** -mtime -2 -exec rsync -av **-R** {} /destination/ \;
這將在目前路徑 ( ) 中的
find
所有文件 ( ) 在過去兩天 ( ) 內被修改,並且對於每個文件:執行 ( ) ,將具有給定名稱 ( ) 的文件複製到,保留大多數屬性 ( ),給出詳細輸出 ( ) 並在目的地 ( ) 再現整個路徑。-type f``.``-mtime -2``-exec``rsync``{}``/destination/``-a``-v``-R