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


23

使用Linux命令行,我使用scp命令从某个目录复制所有文件和文件夹。但是,我不喜欢占用带宽,因为复制的内容很少更改,例如tiny_mce文件夹。复制所有内容但跳过一小段文件夹的窍门是什么?

Answers:


19

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


rsync的并不会自动使用SSH -你必须提供“-e ssh的”标志来做到这一点。

4
是的,它确实。Rsync 2.6.0发布-默认远程外壳现在为“ ssh”,除非您告诉configure要将其他内容设为默认。 samba.org/rsync

12

您可以尝试rsync,它仅复制已更改的文件,也可以在ssh上使用。


9

使用rsync --exclude是这里更明显的选择,但是如果您确实只想发送几个文件或文件夹并且要排除某些特定内容,则可以将Shell globing与一起使用scp。首先,请确保您在外壳中设置了正确的全局选项。对于bash运行shopt -s extglob和zsh使用setopt ksh_glob。然后是这样的:

scp /path/to/folder/!(tiny_mce|other_folder|*.bak) user@host:target_path

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


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

我们要复制除PNG以外的所有内容

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

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


1
请注意,只有在涉及的文件和目录名称不包含任何shell特殊字符(空格或\[*?)时,此答案才有效。
吉尔斯

3

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

lftp sftp://etc.etc/ 
lftp> ls 
    --- remote listing ---
lftp> mirror -R -n local/ remote/

您也可以在ssh上使用RSync

rsync -avzp -e ssh /this/dir/  remoteuser@remotehost:/remote/dir/

应该管用。


0

我刚刚完成写我如何喜欢友升与rsync任何一天,因为它

  • 除了ssh以外,不需要守护进程
  • 让我可以随时在任一侧修改文件- 轻松地拥有多个主机,而我只需要从一侧推送同步请求
  • 当涉及到modtimes,属性/权限,软链接等问题时,我是一个顽固的人。对于一个项目,我什至使用4个镜像,其中一个是cygwin主机。请参阅我的示例crontab设置。
  • 支持诸如的排除*.bak。我的配置文件中的示例

0

使用安全复制-SCP

scp -r file user@host:

复制多个文件

scp /directory/* user@host:destinationPath

复制一些文件

scp /directory/!(*.doc) user@host:destinationPath

它复制目录内容(.doc文件除外)


0

我当然会建议您rsync。

rsync -vra --exclude =“您要排除的内容” -e ssh文件夹user @ remotehost:/ folder


0

当我从目标服务器运行它时,这对我有用。

rsync -av --progress user@servername:/sourcefolder /destinationfolder --exclude thefoldertoexclude

0

我们可以分两步来忽略tiny_mce目录。假设所有目录均以小写字母开头。

scp -r USER@HOSTNAME:~/FOLDER/[a-s]* .
scp -r USER@HOSTNAME:~/FOLDER/[u-z]* .

另外,将USER,HOSTNAME和FOLDER更改为实际值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.