如何使用rsync仅复制符号链接(而不是它指向的文件)或其他文件?
我试过
rsync -uvrl input_dir output_dir
但我只需要复制符号链接吗?
使用包含排除选项的任何技巧?
答案 0 :(得分:7)
每this question+answer,您可以将其编写为管道脚本。管道是shell编程和shell脚本的一个组成部分。
find /path/to/files -type l -print | \
rsync -av --files-from=- /path/to/files user@targethost:/path
这里发生了什么?
find
命令从/ path / to / files开始,并以递归方式逐步执行该点下的所有内容。 find
的选项是限制-print
选项输出内容的条件。在这种情况下,只会打印-type l
(符号链接,根据man find
)的内容以查找“标准输出”。
这些文件成为rsync
命令的--file-from
选项的“标准输入”。
试一试。我实际上并没有测试这个,但在我看来它应该可行。
答案 1 :(得分:4)
您可以生成一个文件列表,不包括find input_dir -not -type l
的链接,rsync有一个选项--exclude-from=exlude_file.txt
你可以分两步完成:
find input_dir -not -type l > /tmp/rsync-exclude.txt
rsync -uvrl --exclude-from=/tmp/rsync-exclude.txt input_dir output_dir
一行bash:
rsync -urvl --exclude-from=<(find input_dir -not -type l | sed 's/^..//') input_dir output_dir
答案 2 :(得分:1)
您可以更轻松地执行此操作:
find /path/to/dir/ -type l -exec rsync -avP {} ssh_server:/path/to/server/ \;
编辑: 如果要仅复制当前目录的符号链接而不使其递归。你可以这样做:
find /path/to/dir/ -maxdepth 1 -type l -exec rsync -avP {} ssh_server:/path/to/server/ \;
答案 3 :(得分:0)
我更喜欢这个:
find ./ -type l -print > /tmp/list_of_links.txt
rsync -av --files-from=/tmp/list_of_links.txt /path/to/files user@targethost:/path
原因很简单。在之前建议的版本中,我必须在每个文件中输入我的密码。这样我只需输入一个密码即可立即发送所有符号链接。