如何使用 scp 将文件夹从远程复制到本地主机?
我使用 ssh 登录到我的服务器。 然后,我想将远程文件夹 foo 复制到本地 /home/user/Desktop。
我如何实现这一目标?
huntsbot.com – 高效赚钱,自由工作
scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/
通过不包括 foo 末尾的尾随“/”,您将复制目录本身(包括内容),而不仅仅是目录的内容。
从 man scp(见 online manual)
-r 递归复制整个目录
我每次谷歌这个。相关漫画:xkcd.com/1168
我发现了两个很好的知识:-C 标志添加了压缩,-c 标志让您可以传入其他密码类型以获得更好的性能,例如 scp -c blowfish a@b:something . as seen in dimuthu's answer
使用 -p 保留文件修改时间、权限等! scp -pr 用户@...
这个答案缺乏重要的解释。你最终会得到 Desktop/foo 还是会得到 Desktop/allcontentsofFooGohere scp 有时对我来说似乎很奇怪
@Toskan 和 scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/ 你应该以 Desktop/foo 结束。使用 scp -r user@your.server.example.com:/path/to/foo/. /home/user/Desktop/,您最终会得到 Desktop 中 foo 的内容,并且 foo 的所有子目录散布在 Desktop 下
huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。
要使用 scp 的全部功能,您需要执行以下步骤:
公钥授权 创建 SSH 别名
然后,例如,如果你有这个 ~/.ssh/config:
Host test
User testuser
HostName test-site.example
Port 22022
Host prod
User produser
HostName production-site.example
Port 22022
您将避免输入密码并简化 scp 语法,如下所示:
scp -r prod:/path/foo /home/user/Desktop # copy to local
scp -r prod:/path/foo test:/tmp # copy from remote prod to remote test
此外,您将能够使用远程路径完成:
scp test:/var/log/ # press tab twice
Display all 151 possibilities? (y or n)
要启用远程 bash-completion,您需要在 和 主机上都有 bash-shell,并且 bash-completion 正常工作。有关更多信息,请参阅相关问题:
How to enable autocompletion for remote paths when using scp? SCP filename tab completion
不知道配置文件,这太棒了!
制表符补全是废话,对我来说只是从本地主机完成。
@b.long 问题是“如何将远程文件夹 foo 复制到本地桌面”。我的回答是“scp -r prod:/path/foo /home/user/Desktop”。希望你能看到关系。
@Bernhard 对我来说很明显,因为我使用的是 bash-shell。谢谢你指点我!答案已更新。
@Alexander Yancharuk:感谢您的回答,这比仅涵盖语法更详细。
打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!
将所有内容从本地位置复制到远程位置(上传)
scp -r /path/from/local username@hostname:/path/to/remote
将所有内容从远程位置复制到本地位置(下载)
scp -r username@hostname:/path/from/remote /path/to/local
自定义端口,其中 xxxx 是 自定义端口 编号
scp -r -P xxxx username@hostname:/path/from/remote /path/to/local
将当前目录从远程复制到本地
scp -r username@hostname:/path/from/remote .
帮助:
-r 递归复制所有目录和文件始终使用 / 的完整位置,通过 pwd 获取完整位置/路径 scp 将替换所有现有文件主机名将是主机名或 IP 地址,如果需要自定义端口(除了端口 22)使用 -P PortNumber。 (点) - 它表示当前工作目录,因此从服务器下载/复制并仅粘贴到此处。
注意:有时自定义端口会因为防火墙不允许端口而无法使用,因此请确保防火墙允许自定义端口进行传入和传出连接
似乎(至少在 Raspbian Jessie 和 Ubuntu 的最新版本中)scp 使用 -P(大写 P)作为端口,而(奇怪的是)ssh 使用 -p(小写)。
-p 保留用于保留“原始文件的修改时间、访问时间和模式”。因此,如果您将其用于端口,它可能无法正常工作 ;-) 除非您有不同的版本以不同方式使用小写 p。
使用 ssh,是的。不是 scp (我假设)。
如果目录包含空格,我应该放什么?
@hyprfrcb 使用 pwd 获取位置并使用相同
与HuntsBot一起,探索全球自由职业机会–huntsbot.com
我经常使用的是:
scp -r username@IP:/path/to/server/source/folder/ .
<强>。 (点):表示current folder。所以从服务器复制并粘贴在这里。
IP:可以是像 125.55.41.311 这样的 IP 地址,也可以是像 ns1.mysite.example 这样的主机。
huntsbot.com – 高效赚钱,自由工作
感谢您指出 . 指的是当前目录!
huntsbot.com – 高效赚钱,自由工作
最好先在远程服务器上压缩目录:
tar czfP backup.tar.gz /path/to/catalog
其次,从远程下载:
scp user@your.server.example.com:/path/to/backup.tar.gz .
最后,解压文件:
tar -xzvf backup.tar.gz
“更好”在很大程度上取决于您正在传输的数据以及通过 ssh 连接到服务器以进行压缩/解压缩的工作量。并且:您可以使用 -C 标志向 scp 添加压缩,例如 scp -C a@b:bigfile .。
这让我想起了@cptloop 的评论! :D xkcd.com/1168
你为我节省了一次额外的谷歌搜索。
与HuntsBot一起,探索全球自由职业机会–huntsbot.com
典型场景,
scp -r -P port username@ip:/path-to-folder .
用样本解释,
scp -r -P 27000 abc@10.70.12.12:/tmp/hotel_dump .
在哪里,
port = 27000
username = "abc" , remote server username
path-to-folder = tmp/hotel_dump
. = current local directory
谢谢你的回答。特定 SSH 端口的 -P 对我很有帮助。
huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!
而且,如果您要从远程位置下载一个地狱般的文件,并且您不太关心安全性,请尝试将 scp 默认加密(Triple-DES)更改为“blowfish”之类的东西。
这将大大减少文件复制时间。
scp -c blowfish -r user@your.server.example.com:/path/to/foo /home/user/Desktop/
根据 this blog post,您可以使用 arcfour 而不是 blowfish 获得更好的性能,但它存在安全漏洞。
huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式
转到统一工具栏上的文件
https://i.stack.imgur.com/ZD6gk.png
按 Ctrl + l 并写 here_goes_your_user_name@192.168.10.123
192.168.1.103 是您要连接的主机。
这里的一个例子
https://i.stack.imgur.com/TFZ4B.png
huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式
如果您遇到“身份验证失败太多”,请指定您添加到服务器 ssh 服务器的确切 SSH 密钥:
scp -r -i /path/to/local/key user@remote.tld:/path/to/folder /your/local/target/dir
HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com
问题是如何使用 scp 命令将文件夹从远程复制到本地。
$ scp -r userRemote@remoteIp:/path/remoteDir /path/localDir
但这是使用 sftp 的更好方法 - SSH 文件传输协议(也称为安全文件传输协议,或 SFTP)是一种网络协议,可通过任何可靠的数据流提供文件访问、文件传输和文件管理。(维基百科)。
$ sftp user_remote@remote_ip
sftp> cd /path/to/remoteDir
sftp> get -r remoteDir
Fetching /path/to/remoteDir to localDir 100% 398 0.4KB/s 00:00
如需有关 sftp 命令的帮助,只需键入 help 或 ?。
huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。
我不知道为什么,但我不得不在 source server directive 之前使用本地文件夹。让它发挥作用
scp -r . root@888.888.888.888:/usr/share/nginx/www/example.org/
保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com
假设用户有权限,你可以在不使用 root@ 的情况下做一个绝对路径吗
huntsbot.com – 高效赚钱,自由工作
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。