的某些類型的文件的rsync副本我使用以下bash腳本來僅複製特定擴展名的文件(在本例中爲* .sh),但它仍會複製所有文件。怎麼了?只使用包含選項
from=$1 to=$2 rsync -zarv --include="*.sh" $from $to
的某些類型的文件的rsync副本我使用以下bash腳本來僅複製特定擴展名的文件(在本例中爲* .sh),但它仍會複製所有文件。怎麼了?只使用包含選項
from=$1 to=$2 rsync -zarv --include="*.sh" $from $to
我覺得--include
用於包括那些以其他方式--exclude
排除,而不是隻包括那些文件的文件的一個子集。
嘗試,而不是:
rsync -zarv --include "*/" --exclude="*" --include="*.sh" "$from" "$to"
UPDATE:
rsync的版本比3.0.7高,訂單需要修改如下(見註釋)
rsync -zarv --include="*/" --include="*.sh" --exclude="*" "$from" "$to"
UPDATE
添加'-m'標誌,將避免id在目標中創建空目錄結構。在版本3.1.2中進行了測試。
雖然它會得到你所有的子目錄,但是如果在你想要rsync的子目錄中有任何.sh文件,你也可以使用--include =「* /」。 –
我在rsync 3.0.7版本上試過這個問題,我很久以前從macports那裏得到了這個版本,並且它沒有與includes/excludes的排序一起工作。這是我最終與我一起工作(適用於OP):'rsync -zarv --include =「* /」--include =「*。sh」--exclude =「*」「$ from」「 $爲「'。 –
比茹的建議有效。答案可以更新嗎? – Jepper
還有一個另外:如果你需要它的擴展在同步文件中的一個目錄只有(不含遞歸的),你應該使用結構是這樣的:
rsync -auzv --include './' --include '.ext' --exclude '*' /source/dir/ /destination/dir/
支付你注意點在第一個--include
。 --no-r
在這種結構中不起作用。
@chepner的回答將會複製所有的子目錄,而不管它是否包含該文件。如果您需要排除不包含該文件的子目錄並仍保留目錄結構,請使用
rsync -zarv --prune-empty-dirs --include "*/" --include="*.sh" --exclude="*" "$from" "$to"
這個答案完全適合我。 +1 :) – Terry
這是我的一個要求:「如果您需要排除不包含該文件的子目錄並仍保留目錄結構」+1 –
儘管不嚴格地說與此相關,但我建議您從/ $到引用$。如果位置參數1/2包含空格,則不這樣做可能會給您意想不到的結果。 –