rsync 僅來自指定子目錄的某些文件類型
這是我的源目錄結構:
../openwrt ../openwrt/BackupOfPackages ../openwrt/BackupOfSettings ../openwrt/BackupOfImages
我想使用 rsync 將其鏡像到目標目錄。我只想 rsync 三個子目錄中的文件,我只想同步帶有副檔名的文件:
.installed
從BackupOfPackages
文件夾
.img.gz
從BackupOfImages
文件夾
.tar.gz
從BackupOfSettings
文件夾在我的源目錄中,我在 basedir“openwrt”和每個子目錄中混合了各種文件。但是如上所述,我只想從特定的子目錄同步特定的文件類型。
這是我的 rsync 命令:
openWrtPath="/mnt/usb/openwrt/" ncpPath="/media/myCloudDrive/openwrt" rsync -vvrit --include='/' --include='BackupOfSettings/' --include='BackupOfSettings/**.tar.gz' --include='BackupOfPackages/' --include='BackupOfPackages/**.installed' --include='BackupOfImages/' --include='BackupOfImages/**.img.gz' --exclude='/*' --delete --delete-excluded $openWrtPath ncp:$ncpPath
當我執行命令時,這就是它顯示和隱藏的內容。它從 basedir 中正確隱藏 opkg.installed 和“新文件夾”,但不會隱藏 BackupOfSettings 和 BackupOfImages 等中的 .installed 等文件類型。
如何將我的 rsync 命令更改為僅將具有副檔名的文件複製:
.installed
到BackupOfPackages
文件夾
.img.gz
到BackupOfImages
文件夾
.tar.gz
到BackupOfSettings
文件夾,即:正確隱藏不應從各種子目錄傳輸到目標的任何文件類型,即使它們存在於源機器上的那些子目錄。
更新
在我發布之後,我想我找到了答案..當我改變它時
--exclude='/*'
,--exclude='*'
它似乎可以按我的意願工作。有人可以解釋這兩個排除之間的區別嗎?是否
'/*'
意味著:“排除 basedir (openwrt) 中的所有內容,這不適用於 basedir 的子目錄”?謝謝!
是否
'/*'
意味著:“排除 basedir (openwrt) 中的所有內容,這不適用於 basedir 的子目錄”?是的,
/
是傳輸目錄的根目錄並/*
匹配那裡的所有內容(文件和目錄)。您可以將命令中的包含縮短為:
rsync -ai \ --include='BackupOf***/' \ --include='BackupOfImages/**.img.gz' \ --include='BackupOfSettings/**.tar.gz' \ --include='BackupOfPackages/**.installed' \ --exclude='*' \ --delete --delete-excluded \ "$openWrtPath" ncp:"$ncpPath"
這裡
--include='BackupOf***/'
的意思是包括所有以開頭的目錄BackupOf
及其子目錄(例如BackupOfImages/sub1/sub2/
)。如果您不需要包含這些子目錄,請將其更改為BackupOf*/
,您也可以將兩個**
文件副檔名更改為一個*
。
-a
我使用了包含-t
和其他選項的存檔模式,並引用了這兩個變數。