仅 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

相关内容