我想同步一个子目录中的所有 *.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