Rsync

rsync 僅在具有固定最大深度的子目錄中的特定文件類型

  • September 25, 2020

我想在一個子目錄中同步所有 *.sh 文件。我嘗試了這個 cmd,但是目錄中的所有文件都是同步的,而不僅僅是特定的文件類型。

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中,應該從 home 開始,同步目錄層次結構,並且只有文件file1.shfile2.sh

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

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

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

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

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

引用自:https://unix.stackexchange.com/questions/611320