java scp 文件夹_如何用 scp命令创建文件夹

博主在尝试使用SCP命令通过SSH创建远程目录并传输文件时遇到问题。讨论中提到,SCP本身不会自动创建不存在的目标目录,但可以使用`-r`选项递归传输文件夹。同时,建议先通过SSH命令手动创建目录,或者在代码中检查并创建目标目录。此外,还提到了使用RSync作为替代方案,通过SSH进行文件传输。问题最终未明确解决,可能涉及代码实现或权限问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

你的位置:

问答吧

-> Unix

-> 问题详情

如何用 scp命令创建文件夹

如题:

如果是目录已经存在的话 用

http://topic.youkuaiyun.com/u/20100916/10/394ccc60-4232-46be-8f30-87327583a8f8.html

可以把文件给传到服务器上,可当文件夹不存在的话不能自动创建。

请问如何创建呢

作者: guofc_presoft

发布时间: 2010-09-17

推荐你使用rsync 也很happy的!

作者: steptodream

发布时间: 2010-09-17

谢谢 不过 客户指定要用SCP命令 SSH来实现

scp -r C:\imart\lst root@10.4.2.77:/usr/gms/20100915/0002/lst

我现在写这样的命令怎么不好用呢!

也不知道文件夹是否能生成出来!

作者: guofc_presoft

发布时间: 2010-09-17

调用的是下面的方法

public static int runSSH(String host, String username, String password,

String cmd) throws IOException {

if (logger.isDebugEnabled()) {

logger.debug("running SSH cmd [" + cmd + "]");

}

Connection conn = getOpenedConnection(host, username, password);

Session sess = conn.openSession();

sess.execCommand(cmd);

InputStream stdout = new StreamGobbler(sess.getStdout());

BufferedReader br = new BufferedReader(new InputStreamReader(stdout));

while (true) {

// attention: do not comment this block, or you will hit

// NullPointerException

// when you are trying to read exit status

String line = br.readLine();

if (line == null)

break;

if (logger.isDebugEnabled()) {

logger.debug(line);

}

}

sess.close();

conn.close();

return sess.getExitStatus().intValue();

}

作者: guofc_presoft

发布时间: 2010-09-17

先用ssh建立对方机器的文件夹/a

ssh username@192.168.*.* mkdir /a

再用scp拷贝

scp /a/b.mp3 username@192.168.*.*:/a/b.mp3

ssh 和 scp 都有相应的命令吗?》我 在上面的方法中执行的是 ssh username@192.168.*.* mkdir /a

命令在怎么也不好用呢

作者: guofc_presoft

发布时间: 2010-09-17

看你的命令是没啥问题的哟 我在linux里就这么用的 既然要求 那你就用scp了 scp也是很方便的

PS:rsync也可以通过ssh传输

作者: steptodream

发布时间: 2010-09-17

ssh username@192.168.*.* "@mkdir /a"

---------

这样也是没问题的 但是你这个username要有在/下创建文件夹的权限才可以。

作者: steptodream

发布时间: 2010-09-17

我 是调用 上面的 runSSH() 这个方法

可执行完就没什么反应了

作者: guofc_presoft

发布时间: 2010-09-17

引用 7 楼 guofc_presoft 的回复:

我 是调用 上面的 runSSH() 这个方法

可执行完就没什么反应了

要是能在命令行执行的话 你现在命令行执行试试

你用代码来操作 万一是你自己代码的问题呢?

作者: steptodream

发布时间: 2010-09-17

也有权限啊

郁闷死了

那老大知道如何创建文件夹吗

作者: guofc_presoft

发布时间: 2010-09-17

恩 我 用其他的方法

public static void scpPut(String host, String username, String password,

String localFile, String remoteDir) throws IOException {

if (logger.isDebugEnabled()) {

logger.debug("spc [" + localFile + "] to " + host + remoteDir);

}

Connection conn = getOpenedConnection(host, username, password);

SCPClient client = new SCPClient(conn);

client.put(localFile, remoteDir);

conn.close();

}

如这些传送文件都可以用!

另外 命令行执行 需要在哪里执行,需要什么环境吗?

作者: guofc_presoft

发布时间: 2010-09-17

引用 9 楼 guofc_presoft 的回复:

也有权限啊

郁闷死了

那老大知道如何创建文件夹吗

scp是会自己建文件夹的呀 我刚刚试了。

作者: steptodream

发布时间: 2010-09-17

但是我调用 scpPut() 这个方法,如果是路径正确的话就可以COPY过去

如果是没有文件夹的话就会报错误。

Error during SCP transfer.

at ch.ethz.ssh2.SCPClient.put(SCPClient.java:575)

at ch.ethz.ssh2.SCPClient.put(SCPClient.java:533)

at ch.ethz.ssh2.SCPClient.put(SCPClient.java:394)

at jp.co.u_can.manabi.imp.batch.DeliveryInstructionBatch.scpPut(DeliveryInstructionBatch.java:444)

at jp.co.u_can.manabi.imp.batch.DeliveryInstructionBatch.execute(DeliveryInstructionBatch.java:366)

at jp.co.u_can.manabi.imp.batch.DeliveryInstructionBatch.main(DeliveryInstructionBatch.java:241)

Caused by: java.io.IOException: Remote scp terminated with error (scp: /usr/gms/20100915/0002/lst: No such file or directory).

at ch.ethz.ssh2.SCPClient.readResponse(SCPClient.java:59)

at ch.ethz.ssh2.SCPClient.sendFiles(SCPClient.java:163)

at ch.ethz.ssh2.SCPClient.put(SCPClient.java:571)

... 5 more

作者: guofc_presoft

发布时间: 2010-09-17

你在windows下用winscp这个工具 往服务器上传文件试试

http://sourceforge.net/projects/winscp/

作者: steptodream

发布时间: 2010-09-17

那你把命令改成

scp -r C:\imart\lst root@10.4.2.77:/usr/gms/20100915/0002/

这样试试呢?

作者: steptodream

发布时间: 2010-09-17

winscp 这个工具我有,用ROOT用户登陆后建立文件夹都可以!

不过 我现在做的是BAT 需要自动创建文件夹以及COPY文件

作者: guofc_presoft

发布时间: 2010-09-17

引用 14 楼 steptodream 的回复:

那你把命令改成

scp -r C:\imart\lst root@10.4.2.77:/usr/gms/20100915/0002/

这样试试呢?

这种也不行,调用上面的runSSH方法一点反应都没有。

作者: guofc_presoft

发布时间: 2010-09-17

难道你这里用 和我linux里还有区别?

我在linux里 /path1/path2/是存在的

scp -r /path/folder root@ip:/path1/path2/

然后ip机器的/path1/path2/下就会有folder文件夹 即/path1/path2/folder

scp -r /path/folder root@ip:/path1/path2/folder

结果同上

scp -r /path/folder root@ip:/path1/path2/test

然后folder下的内容 会在/path1/path2/test/下 也就是说没产生folder

scp -r /path/folder root@ip:/path1/path2/test1/folder

其中test1目录不存在 这种情况就会出错

scp: /path1/path2/test1/folder: No such file or directory

作者: steptodream

发布时间: 2010-09-17

引用 6 楼 steptodream 的回复:

ssh username@192.168.*.* "@mkdir /a"

---------

这样也是没问题的 但是你这个username要有在/下创建文件夹的权限才可以。

这个SSH命令也可以用 runSSH() 这个方法执行吗

作者: guofc_presoft

发布时间: 2010-09-17

引用 10 楼 guofc_presoft 的回复:

恩 我 用其他的方法

public static void scpPut(String host, String username, String password,

String localFile, String remoteDir) throws IOException {

if (logger.isDebugEnabled()) {

logger.d……

调用这个方法,如何判断没有文件夹的时候,把文件夹给建立起来啊 !

各位!

作者: guofc_presoft

发布时间: 2010-09-17

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值