Rsync

如何使用 rsync 強制所有 *.jar 文件匹配?

  • November 14, 2021

我有一個目錄,裡面有很多文件。我唯一關心的是那些有副檔名的.jar。但是,目錄中還有其他文件。

我有一個只有 .jar文件的源目錄。我想達到相當於:

rm destdir/*.jar
cp sourcedir/*.jar destdir

但是,如果它們已經是正確的文件,我想這樣做而不實際刪除已經存在的文件。


換句話說,我希望可以執行一個命令:

  1. .jar對於存在sourcedir但不在 中的任何文件destdir,請將它們複製過來。
  2. 對於和中存在的任何.jar文件,請確保 in中的副本與副本中的副本匹配,如果不匹配則覆蓋它。sourcedir``destdir``destdir``sourcedir
  3. 對於.jar存在destdir不在中的任何文件sourcedir,請刪除該文件。
  4. 對於其中存在的任何其他文件destdir(沒有.jar副檔名),請忽略它們——不要刪除或更改它們。

似乎這應該是可能rsync。我怎樣才能做到這一點?

您可以使用:

rsync -av --include='*.jar' --exclude='*' --delete \
   sourcedir/ destdir/

-a選項是存檔模式,它保留連結和時間戳等內容(查看man頁面以獲取完整說明)。-v用於冗長,如果您不關心日誌,請刪除。

那應該處理你的前三個選項。該--delete選項將滿足您的第四個要求,同時忽略排除的文件。

如果您希望包含包含.jar文件的目錄,您可以使用

rsync -av --include='*.jar' --include='*/' --exclude='*' --delete \
   sourcedir/ destdir/

根據此處的答案,如果您還有其他問題,它應該對您有所幫助:Rsync 過濾器:僅複製一種模式

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