如何使用scp将所有文件从目录复制到远程目录?


68

我的目标是只复制所有文件〜/ local_diruser@host.com在/ var / www / html等/ TARGET_DIR使用SCP和不local_dir创建local_dir类别。

/var/www/html/target_dir/files..

但不是

/var/www/html/target_dir/local_dir/files.. 使用-r参数时


1
难道scp * user@host.com:/var/www/html/target_dir不是你想要做什么?如果是这样,请更详细地编辑您目前正在尝试做的事情。
Michael Homer 2015年

追加/。不再工作。更多内容
Tsulatsi Tamim

Answers:


91

scp具有-r参数。因此,尝试使用:

$ scp -r ~/local_dir user@host.com:/var/www/html/target_dir

-r参数的工作方式与cp中的-r arg一样,它将传输整个文件夹以及其中的所有文件和子目录。


5
您的命令local_dir在/ var / www / html / target_dir中创建了目录,我的目标是仅复制文件。
Edgaras Karka

抱歉,我理解错了。然后,只需重复执行该命令即可,但是就像这样:$ scp -r ~/local_dir user@host.com:/var/www/html/如果需要,然后重命名新目录。
瘫痪

8
$ scp -r ~/local_dir/* user@host.com:/var/www/html/target_dir任何使您的船浮起的东西。
2015年

如何在复制到远程目录时从本地排除某些目录
Sushivam

13
将通配符更改*为点.,您将复制目录内容(包括任何点文件),而无需复制目录本身。scp -pr ~/local_dir/. user@example.com:/path/to/target_dir
roaima

19

如果您的目标是从通配符传输所有文件,local_dir*执行以下操作:

$ scp ~/local_dir/* user@host.com:/var/www/html/target_dir

-r选项的含义是“递归”,因此在尝试传输整个目录或几个目录时,必须将其编写。

来自man scp

-r 
Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal.

因此,如果您在中有子目录local_dir,最后一个示例将仅传输文件,但是如果您设置了该-r选项,它将传输文件和目录。


1+因为您需要阅读接受的答案中的注释才能获得正确的答案,而本答案仅作直接解释。
安德烈·克里斯托弗·安徒生

17

附加/.到源目录将传输其内容,而不是目录本身。与通配符解决方案相反,它还将包括所有隐藏文件。

$ scp -r ~/local_dir/. user@host.com:/var/www/html/target_dir

这种解决方案值得称赞的是roaima,但我认为应该将其发布为实际答案,而不仅仅是评论。


0

跟着这些步骤:

  1. 复制目录local_dir及其所有子目录:

    scp -r ~/local_dir user@host.com /var/www/html/target_dir
    
  2. 仅复制local_dir目录的内容,而不复制目录local_dir本身:

    scp -r ~/local_dir/* user@host.com /var/www/html/target_dir
    
  3. 请勿使用:scp -r ~/local_dir/. user@host.com /var/www/html/target_dir因为它会引发错误(经过测试并收到以下错误):

    scp: error: unexpected filename: .
    
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.