
我想同步一個子目錄中的所有 *.sh 檔案。我嘗試了這個命令,但目錄中的所有檔案都會同步,而不僅僅是特定的檔案類型。
rsync -vr -n --include="*.sh" --exclude="*/*/" --prune-empty-dirs /source /target
我還嘗試添加一個過濾器,例如
--filter="+ *.sh"
但這並沒有改變結果。另一個過濾器
rsync -vr -n --include="*.sh" --filter="-! *.sh" --exclude="*/*/" --prune-empty-dirs
給了我一個空列表。如果我排除“*”,我也會排除“*.sh”...出了什麼問題?謝謝!
深度應該是一 - 子目錄的名稱未知。例如,
home/subdirectory1/subsubdirectory/subsubsubdirectory/file.sh
home/subdirectory1/file1.sh
home/subdirectory2/file2.sh
home/subdirectory3/file
在上面的範例中,rsync
應從主目錄開始,同步目錄層次結構,並且僅同步檔案file1.sh
和file2.sh
答案1
你的例子似乎與你的描述不符。我想你所說的你想要的是這個,
*.sh
匹配緊接在您的目錄下的未知子目錄中的所有文件/home
- 將檔案放入目標上的未知子目錄中
- 不包含
/home
在目標路徑中
從 來看/home
,該命令將匹配所有檔案*/*.sh
並將它們及其部分路徑複製到目標。 (--dry-run
如果您對預期結果滿意,請刪除 。)
rsync --dry-run -avR /home/./*/*.sh /target
例如,/home/subdir/file.sh
將被複製到/target/subdir/file.sh