当前位置: 首页 > 知识库问答 >
问题:

将文件夹保存到远程系统以保持目录布局

柯阳曦
2023-03-14

我有一个包含数百个嵌套子文件夹的大目录树。我只需要将4个文件夹及其内容复制到远程系统,但我需要保持目标文件夹结构不变。

例如。

./test/sub1/subsub1/hello.txt
./test/sub1/subsub2/hello2.txt    
./test/sub2/hello3.txt

我想复制/测试/sub1/sub1/*到目标,例如user@system:/test/sub1/subsub1/*但我不想复制subsub2或sub2。

我尝试使用scp如下:

scp -r ./test/sub1/subsub1 me@my-system:~/test/sub1/subsub1

结果:scp:/test/sub1/subsub1:没有这样的文件或目录

我也尝试过:

scp -r ./test/sub1/subsub1 me@my-system:~/test

这可以工作,但会将所有文件转储到单个目录中。不维护/test/sub1/subsub1目录结构。

如何复制文件夹,同时保持其结构?

共有2个答案

段干俊茂
2023-03-14

使用-R(--相对)选项rsync以保留目录结构。看看:

https://serverfault.com/questions/39522/how-to-keep-the-full-path-with-rsync

举个例子:

[localbox] tree test
test
└── sub1
    └── subsub1
        ├── a
        ├── b
        ├── c
        ├── d
        ├── e
        └── f


 [localbox] rsync -avR test/sub1/subsub1 me@my-system:dest_path
 sending incremental file list
 created directory dest_path
 test/
 test/sub1/
 test/sub1/subsub1/
 test/sub1/subsub1/a
 test/sub1/subsub1/b
 test/sub1/subsub1/c
 test/sub1/subsub1/d
 test/sub1/subsub1/e
 test/sub1/subsub1/f

 sent 406 bytes  received 185 bytes  394.00 bytes/sec
 total size is 0  speedup is 0.00

 [localbox] ssh me@my-system
 [my-system] tree dest_path
 dest_path
 `-- test
    `-- sub1
        `-- subsub1
            |-- a
            |-- b
            |-- c
            |-- d
            |-- e
            `-- f

  3 directories, 6 files

以下内容摘自rsync手册页:

-R、 --相对

使用相对路径。这意味着命令行上指定的完整路径名被发送到服务器,而不仅仅是文件名的最后一部分。当您想同时发送多个不同的目录时,这特别有用。例如,如果您使用此命令:

     rsync -av /foo/bar/baz.c remote:/tmp/

... 这将创建一个名为baz的文件。远程机器上的c in/tmp/。如果您使用

     rsync -avR /foo/bar/baz.c remote:/tmp/

然后是一个名为/tmp/foo/bar/baz的文件。c将在远程机器上创建,保留其完整路径。这些额外的路径元素称为“隐含目录”(即上例中的“foo”和“foo/bar”目录)。

陈项禹
2023-03-14

你需要一个双通道解决方案。首先,确保远程主机上存在目标目录:

ssh me@my-system 'mkdir -p ~/test/sub1/subsub1' 

然后,你可以复制你的文件。我建议使用rsync而不是scp,因为它是为同步目录而设计的。示例用法:

rsync -r -e ssh ./test/sub1/subsub1/ me@my-system:~/test/sub1/subsub1

标记接受远程shell来执行传输。尾随斜杠对于rsync非常重要,因此请确保您的斜杠与上述示例匹配。

 类似资料:
  • 问题内容: 我有一个带有数百个嵌套子文件夹的大型目录树。我只需要将4个文件夹及其内容复制到远程系统,但是我需要将目标文件夹结构保持不变。 例如 我想将./test/sub1/subsub1/复制到诸如user @ system:〜/ test / sub1 / subsub1 / 的目标,但是我不想复制subsub2或sub2。 我已经尝试过使用scp,如下所示: 结果:scp:/ test /

  • 问题内容: 我使用以下代码将文件保存在swift 3的文档目录中: 但是正如您所看到的,我不习惯获取文档目录路径,因为它仅给出URL而不是字符串。 问题: 如何从文件管理器获取字符串? 我的代码有崩溃的可能吗? 问题答案: 请反过来考虑。 建议使用此方法来处理文件路径,因为它包含用于添加和删除路径组件和扩展名的所有便捷方法,而不是Apple从中删除了这些方法。 不鼓励您连接诸如之类的路径。这很容易

  • 问题内容: 我有使用Spark生成的RDD。现在,如果我将此RDD写入csv文件,则可以使用“ saveAsTextFile()”之类的一些方法,该方法将csv文件输出到HDFS。 我想将文件写入本地文件系统,以便我的SSIS进程可以从系统中选择文件并将它们加载到DB中。 我目前无法使用sqoop。 除了编写Shell脚本之外,Java中是否还有其他地方可以做到这一点? 需要任何清晰度,请告知。

  • 我想知道如何保存单个对象(例如用户的令牌)到文件系统。共享偏好是最佳做法吗?还是用单行的表或者其他的更好?

  • 我的应用程序将一些文件保存到设备上的数据/数据文件夹中。保存远程文件后,我会处理这些文件,并将它们复制到其他文件夹中。在之前测试过的所有设备上,All都能正常工作,但在galaxy s3上会生成空指针异常。似乎我不被允许在那个文件夹上写或处理文件!但只有新的星系s3!我也无法使用EclipseDDMS文件浏览器在数据文件夹中找到任何文件,而在模拟器(相同的android版本)中,我可以正确查看所有

  • 问题内容: 我正在尝试创建文件并将其保存到站点的根目录,但是我不知道它在哪里创建文件,因为看不到任何文件。而且,如果可能的话,我需要每次都覆盖该文件。 这是我的代码: 如何设置保存在根目录下? 问题答案: 它在与脚本相同的目录中创建文件。试试这个吧。