僅 rsync 具有固定最大深度的子目錄中的特定檔案類型

僅 rsync 具有固定最大深度的子目錄中的特定檔案類型

我想同步一個子目錄中的所有 *.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.shfile2.sh

答案1

你的例子似乎與你的描述不符。我想你所說的你想要的是這個,

  • *.sh匹配緊接在您的目錄下的未知子目錄中的所有文件/home
  • 將檔案放入目標上的未知子目錄中
  • 不包含/home在目標路徑中

從 來看/home,該命令將匹配所有檔案*/*.sh並將它們及其部分路徑複製到目標。 (--dry-run如果您對預期結果滿意,請刪除 。)

rsync --dry-run -avR /home/./*/*.sh /target

例如,/home/subdir/file.sh將被複製到/target/subdir/file.sh

相關內容