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

Edg*_*rka 123 scp

我的目标是使用scp仅将所有文件~/local_dir复制到user@host.com /var/www/html/target_dir并且不在 local_dir 中创建 local_dir 类别。

/var/www/html/target_dir/files..
Run Code Online (Sandbox Code Playgroud)

但不是

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

par*_*zyd 166

scp 有 -r 参数。所以,尝试使用:

$ scp -r ~/local_dir user@host.com:/var/www/html/target_dir
Run Code Online (Sandbox Code Playgroud)

-r 参数就像 cp 中的 -r 参数一样,它将传输您的整个文件夹以及其中的所有文件和子目录。

  • 将通配符 `*` 更改为点 `.`,您将复制目录内容(包括任何点文件)而不复制目录本身。`scp -pr ~/local_dir/. user@example.com:/path/to/target_dir` (22认同)
  • 您的命令在 /var/www/html/target_dir 中创建了 `local_dir` 目录,我的目标是仅复制文件。 (15认同)
  • 或者`$ scp -r ~/local_dir/* user@host.com:/var/www/html/target_dir` 任何漂浮在你船上的东西。 (11认同)
  • 抱歉,我听错了。然后只需重复命令,但像这样: `$ scp -r ~/local_dir user@host.com:/var/www/html/` 然后根据需要重命名新目录。 (2认同)
  • 不幸的是,使用 `.` 已经被一个执行不力的 `scp`“错误修复”破坏了(参见 <https://superuser.com/questions/1403473/scp-error-unexpected-filename/1403506#1403506>)。`rsync` 将是一个可行的替代方案。 (2认同)

tac*_*omi 39

如果您的目标是从通配符传输所有文件,local_dir*可以:

$ scp ~/local_dir/* user@host.com:/var/www/html/target_dir
Run Code Online (Sandbox Code Playgroud)

-r选项表示“递归”,因此当您尝试传输整个目录或多个目录时必须编写它。

来自man scp

-r 
Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal.
Run Code Online (Sandbox Code Playgroud)

所以如果你在里面有子目录local_dir,最后一个例子只会传输文件,但是如果你设置了这个-r选项,它将传输文件和目录。

  • 1+ 因为您需要阅读已接受答案中的评论才能获得正确答案,而这个只是直接解释。 (2认同)

rap*_*sse 24

附加/.到您的源目录将传输其内容而不是目录本身。与通配符解决方案相反,这也将包括任何隐藏文件。

$ scp -r ~/local_dir/. user@host.com:/var/www/html/target_dir
Run Code Online (Sandbox Code Playgroud)

此解决方案的功劳归功于 roaima,但我认为它应该作为实际答案发布,而不仅仅是评论。

  • 不幸的是,这个解决方案被一个执行不力的`scp`“错误修复”破坏了(参见<https://superuser.com/questions/1403473/scp-error-unexpected-filename/1403506#1403506>)。 (3认同)

小智 10

按着这些次序:

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

    scp -r ~/local_dir user@host.com /var/www/html/target_dir
    
    Run Code Online (Sandbox Code Playgroud)
  2. 只复制local_dir目录的内容而不是目录local_dir本身:

    scp -r ~/local_dir/* user@host.com /var/www/html/target_dir
    
    Run Code Online (Sandbox Code Playgroud)
  3. 不要使用:scp -r ~/local_dir/. user@host.com /var/www/html/target_dir因为它会引发错误(刚刚测试并收到以下错误):

    scp: error: unexpected filename: .
    
    Run Code Online (Sandbox Code Playgroud)