如何从远程根目录 (/) 进行 scp

如何从远程根目录 (/) 进行 scp

我正在尝试从远程进行 scp,并且想要复制整个文件系统(它是一个小型嵌入式 Linux 设备)。 SCP 不喜欢我尝试的方式:

scp -r name@ip:/ ./local_folder

我收到以下错误:

error: unexpected filename:

如果我用 -v 运行它,最后一条消息看起来像这样:

debug1: Sending command: scp -v -r -f /
Entering directory: D0755 0 
Sink: D0755 0 
error: unexpected filename:

如果我这样做

scp -r name@ip:/etc ./local_folder

相同的调试片段如下所示:

debug1: Sending command: scp -v -r -f /etc
Entering directory: D0755 0 etc
Sink: D0755 0 etc

搜索起来有点困难,如果我尝试搜索“scp 根目录斜杠意外文件名”等搜索词,我找不到任何有同样问题的人。

答案1

由于scp遵循任何遇到的符号链接,因此使用按原样复制文件的工具会更有意义。

rsync程序能够比以下更好地重新创建目录结构scp

rsync -av name@ip:/ ./local_folder

这不仅保留文件元数据(时间戳等),而且还复制/目录中找到的隐藏文件(如果有)。

您可以rsync通过另外使用来保留硬链接-H

rsync用作ssh其默认传输。


您还可以tar在远程系统上使用ssh

ssh name@ip tar -c -f - -C / . >local_folder/filesystem.tar

或者

ssh name@ip tar -c -f - -C / . | tar -v -x -f - -C local_folder

答案2

tldr:尝试name@ip://代替name@ip:/

我正在尝试类似的事情。我想使用 WINScp 运行 scp 脚本,并且不指定默认远程目录,我的脚本始终连接到相同的目录,看似随机,文件系统内的文件夹。我猜这是我的主目录username

如果 url 以/ie 结尾,name@ip:/则会导致连接到该地址随机主目录。即使该目录不存在(这会导致执行某些命令时出现奇怪的行为......)。显式执行后cd /,我已经连接到根目录了。

我改成后///name@ip://scp连接到根目录,不需要执行cd /

答案3

使用scp -r name@ip:/. ./local_folder

或者,该dd命令可用于逐位备份(请参见

答案4

所以实际上,对于我想要的,我找到了一个更快的选项,这也允许我忽略一些文件:

sshfs user@server: sshfsdir
rsync --recursive --exclude=whatever sshfsdir/path/on/server /where/to/store

(从https://stackoverflow.com/questions/15121337/recursively-use-scp-but-exclusion-some-folders

相关内容