除了通过 ssh 复制某些文件和目录外,如何复制所有文件和目录?

25 ssh remote file-copy synchronization

使用Linux命令行,我使用scp命令,从某个目录复制所有文件和文件夹。但是,我不喜欢消耗带宽,因为复制我很少改变的东西,比如我的tiny_mce文件夹。复制所有内容但跳过一小部分文件夹的技巧是什么?

小智 20

rsync工作正常,并且在大多数情况下,会自动使用 SSH 作为传输协议。它将比较文件并只上传那些已更改的文件 - 但您也可以使用排除列表来指定树中无论如何都不应该同步的文件。

  • 是的,它确实。Rsync 2.6.0 发布 - 默认远程 shell 现在是“ssh”,除非你告诉 configure 你想把其他东西设为默认值。http://www.samba.org/rsync/ (4认同)

小智 12

您可以尝试仅复制已更改文件的rsync,也可以通过 ssh 运行。


Cal*_*leb 9

使用rsync --exclude是这里更明显的选择,但如果您真的只想发送一些文件或文件夹并有特定的内容要排除,您可以使用带有scp. 首先确保在 shell 中设置了正确的全局选项。对于 bash 运行shopt -s extglob和 zsh 使用setopt ksh_glob. 然后是这样的:

scp /path/to/folder/!(tiny_mce|other_folder|*.bak) user@host:target_path
Run Code Online (Sandbox Code Playgroud)

...将复制源文件夹中的所有内容,但与给定模式匹配的内容除外。显然,您可以在该部分发挥创意。


小智 7

rsync 是一个很好的解决方案,但如果您正在寻找替代方案:

假设我们有一个目录“test”,其中包含目录“foo, bar, baz”。在这些目录中有一堆不同的文件类型:

test
|____bar
| |____1.jpg
| |____1.png
| |____1.txt
| |____2.jpg
| |____2.png
| |____2.txt
|____baz
| |____1.avi
| |____2.avi
| |____3.png
|____foo
| |____test.blah
|____test.txt
Run Code Online (Sandbox Code Playgroud)

我们想复制除 PNG 之外的所有内容

scp $(find /location/of/test -type f ! -name "*.png") # -> Note the logical NOT!!
Run Code Online (Sandbox Code Playgroud)

在此示例中,该命令会将所有文件放入同一目标目录 - 这可能不是您想要的行为。


Ken*_*ric 4

您可能想尝试的一个很棒的工具是“lftp”。

lftp sftp://etc.etc/ 
lftp> ls 
    --- remote listing ---
lftp> mirror -R -n local/ remote/
Run Code Online (Sandbox Code Playgroud)

您还可以通过 ssh 使用 RSync

rsync -avzp -e ssh /this/dir/  remoteuser@remotehost:/remote/dir/
Run Code Online (Sandbox Code Playgroud)

应该管用。