rsync 递归到平面目的地

rsync 递归到平面目的地

我想在未知的目录结构上运行 rsync,并让它仅同步文件而不同步目录。

我尝试过很多方法,甚至包括通过管道查找,但都没有成功。

示例源目录:

somedir/
   file1.txt
   file2.txt
     anotherdir/
        file3.txt

示例目标目录:

file1.txt
file2.txt
file3.txt

答案1

您可以rsync在非递归模式(不带-r)中与递归 shell glob 一起使用。这样,您就可以将文件夹中所有文件和子目录的列表作为参数提供给它,但它将忽略所有目录并仅传输文件。

注意:递归通配符 ( **) 需要globstar在 Bash 中设置 shell 选项。使用 为当前会话启用它,shopt -s globstar或者在文件中取消注释该行.bashrc以永久启用它。

$ tree .
.
└── somedir
    ├── anotherdir
    │   └── file3.txt
    ├── file1.txt
    └── file2.txt

$ rsync ** myserver:/tmp/rsynctest
skipping directory somedir
skipping directory anotherdir

$ ssh myserver tree /tmp/rsynctest
/tmp/rsynctest
├── file1.txt
├── file2.txt
└── file3.txt

如果您想指定rsync暗示递归的其他参数(例如-a),您可以再次使用明确禁用递归--no-r

递归 glob 也可以是更长路径或更复杂模式的一部分。只需确保包含所需的所有文件,任何目录都将被忽略。

$ rsync -avz --no-r somewhere/local/**/*.txt myserver:/tmp/rsynctest/
skipping directory .
skipping directory somedir
skipping directory anotherdir
file1.txt
file2.txt
file3.txt

sent 231 bytes  received 73 bytes  202.67 bytes/sec
total size is 0  speedup is 0.00

相关内容