Как удалить папку в удаленной Windows из Linux

Я запускаю тесты автоматизации как на локальном (Linux), так и на удаленном узле Selenium (Windows). И я хочу удалить папку, созданную во время теста, используя Java Runtime.getRuntime().exec. Он отлично работает на локальном компьютере (Linux), но мне трудно понять, как это сделать на узле Windows. Ниже приведены мои попытки:

try {
    if (rBundle.getString("RUN_ON").equalsIgnoreCase("local")) // delete folder temp on local (Linux) - it works
        Runtime.getRuntime().exec("rm -rf " + System.getProperty("user.home") + "/Temp");
    else // delete folder C:/Temp on remote Windows
        Runtime.getRuntime().exec("rm -rf [email protected]/C/Temp");
        // Runtime.getRuntime().exec("rm -rf //10.2.2.240/C/Temp");
} catch (IOException e) {
    e.printStackTrace();
}

Я пытаюсь удалить папку C:/Temp на удаленной Windows, но безуспешно. Я не получаю никаких исключений, он прошел через этот блок. Очевидно, что командная строка неверна, но я понятия не имею.

Любая помощь высоко ценится. Спасибо


person Ragnarsson    schedule 04.05.2018    source источник
comment
Вам просто нужно найти работающую командную строку, которую вы можете сделать в своей оболочке, а затем exec() в своем Java-коде. Это вовсе не вопрос о Java, это вопрос о Linux и Windows, и, вероятно, не по теме, поскольку он больше подходит для superuser.com.   -  person user207421    schedule 07.05.2018
comment
@EJP спасибо за подсказку   -  person Ragnarsson    schedule 07.05.2018
comment
Немного опираясь на комментарий EJP, если вы действительно хотите иметь возможность делать это из коробки Linux, вы, вероятно, захотите настроить Samba на этой машине.   -  person Peter Brittain    schedule 08.05.2018
comment
Вы можете попробовать выполнить команду через ssh, которая сделает команду ssh [email protected] "rm -rf /C/Temp". Если у вас нет настроенного сервера ssh на вашем компьютере с Windows, cygwin — одно из возможных решений с множеством онлайн-руководств по настройке.   -  person paulselles    schedule 11.05.2018
comment
Когда вы говорите, что используете Selenium, я предполагаю, что вы тестируете веб-сайт на двух разных серверах, верно?   -  person Isma    schedule 12.05.2018
comment
@Isma Итак, мое рабочее пространство (код автоматизации) находится в Linux для тестирования веб-сайта. Он работает локально (мой Linux) и на узле Selenium, который является Windows.   -  person Ragnarsson    schedule 14.05.2018
comment
Хорошо, спасибо за информацию, я добавил еще один возможный способ сделать это напрямую с веб-сервера, чтобы вы могли избежать хлопот с выполнением удаленных команд.   -  person Isma    schedule 14.05.2018


Ответы (4)


Другой способ добиться этого может состоять в том, чтобы сделать это непосредственно с веб-сервера, добавив на свой веб-сайт метод для очистки ресурсов.

Например: http://your_server/clean_resources

Затем просто используйте Java, чтобы удалить папку:

// You could pass a parameter to the URL to know if it's windows  
// or linux and set the path accordingly
String path = "c:/temp";

Path directory = Paths.get(path);
    Files.walkFileTree(directory, new SimpleFileVisitor<Path>() {

        @Override
        public FileVisitResult visitFile(Path file,
                BasicFileAttributes attrs) throws IOException {
            Files.delete(file);
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult postVisitDirectory(Path dir, IOException exc)
                throws IOException {
            Files.delete(dir);
            return FileVisitResult.CONTINUE;
        }
    });

Наконец, используя Selenium, просто перейдите по этому URL-адресу, когда закончите тест.

driver.get("http://your_server/clean_resources");
person Isma    schedule 14.05.2018
comment
Спасибо, я думаю, что это близкое решение, я могу избавиться от командной строки - person Ragnarsson; 14.05.2018

в винде попробуй

rmdir directoryname /s /q

согласно документации https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/rd

/s Удаляет дерево каталогов (указанный каталог и все его подкаталоги, включая все файлы).

/q Задает тихий режим. Не запрашивает подтверждение при удалении дерева каталогов. (Обратите внимание, что /q работает, только если указан /s.)

Как запустить эту команду Windows со станции Linux... хороший вопрос

person Roman Gherta    schedule 12.05.2018

Первоначально добавил это как комментарий, но обновил до ответа для большей наглядности.

Выполните команду rm на сервере Windows через ssh. Это потребует от вас настройки ssh-сервера в Windows, cygwin выглядит одним из лучших вариантов. После настройки сервера ssh для выполнения удаленной команды rm будет использоваться команда ssh [email protected] "rm -rf /cygdrive/c/Temp".

person paulselles    schedule 13.05.2018

rm — это команда для командной строки Linux, эквивалентная команде в Windows, это команда del:

    C:\>del /?
    Deletes one or more files.

    DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
    ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

      names         Specifies a list of one or more files or directories.
                    Wildcards may be used to delete multiple files. If a
                    directory is specified, all files within the directory
                    will be deleted.

      /P            Prompts for confirmation before deleting each file.
      /F            Force deleting of read-only files.
      /S            Delete specified files from all subdirectories.
      /Q            Quiet mode, do not ask if ok to delete on global wildcard
      /A            Selects files to delete based on attributes
      attributes    R  Read-only files            S  System files
            H  Hidden files               A  Files ready for archiving
            I  Not content indexed Files  L  Reparse Points
            -  Prefix meaning not

Чтобы удалить папку, используйте:

      DEL /F /S /Q /A "Full Path of Folder\*"

Ссылка: sevenforums

person Sheece Gardazi    schedule 14.05.2018