Команда переименования не работает при использовании JSch - PullRequest
0 голосов
/ 06 февраля 2020

Попытка переименовать файл / папку с использованием JSch API, выполняющего их как команды оболочки, не работает. mkdir и rmdir работают нормально.

JDK версия - 11.

JSch версия - 0.1.55.

Будут благодарны любые выводы. Заранее спасибо.

Используя следующий код.

ChannelExec execChannel = null;
        try {
          execChannel = (ChannelExec) session.openChannel("exec");
          execChannel.connect();
          execChannel.setCommand("rename dir1 dir2");
          execChannel.start();
        } catch (JSchException ex) {
          throw new IOException(ex);
        } finally {
          if (execChannel != null) {
            execChannel.disconnect();
          }
        }

Обновление:

  • Сервер SFTP размещен на компьютере CentOS
  • mv, ren, rename - ни один из них не работал
  • Как мы узнаем, что команда не работала - Имя папки остается прежним. Также execChannel.getExitStatus () дает -1. Ошибка не выдается

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Скорее всего, вы выполняете неправильную команду. Если вы подключаетесь к Linux, используйте следующую команду: mv.


Однако вы не должны использовать команды оболочки для тривиальных операций с файлами, таких как создание и удаление каталог и переименование файла / каталога. Это очень быстрый подход agile.

Вместо этого используйте стандартный API управления файлами S SH, SFTP (ChannelSftp в JSch ).

ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
sftpChannel.connect();

sftpChannel.mkdir("/path/dir1")
sftpChannel.rename("/path/dir1", "/path/dir2");
sftpChannel.rmdir("/path/dir2");
0 голосов
/ 06 февраля 2020

Если вы используете Jsch, я считаю, что удаленный хост является Unix -подобной системой. В Unix нет команды rename. Вместо этого используйте mv.

...