Существуют ли другие команды, такие как scp, но для удаления файлов и папок?

13

Я использую scp для копирования материалов в удаленное местоположение. Но иногда scp не работает должным образом, я обнаружил, что иногда копирование не завершается должным образом (возможно, когда я добавил новые файлы в папку, которую я копирую).

Поэтому я хочу сначала удалить удаленную папку, а затем сделать копию, чтобы убедиться, что у меня есть именно то, что мне нужно.

Существуют ли другие команды, такие как scp (например, srm или smv)? Или есть способ удалить удаленные папки и файлы?

code_fodder
источник

Ответы:

19

Команда sshпозволит вам выполнить практически любую команду на удаленном хосте, например,

ssh yourlogin@remotehost rmdir somedir

где в этом примере somedirэто относительно домашнего каталога yourlogin.

garyjohn
источник
Спасибо за это. Единственная проблема, которая возникает у меня с этим методом, заключается в том, что каждый раз, когда вы вызываете его, вы должны снова «входить в систему» ​​:(. Так как моя цель встроена, я не могу использовать ssh-ключи, потому что все это перезаписывается, поэтому я пытаюсь сделать это в одной команде. rsync выглядит многообещающе. Но, +1, так как это действительно отвечает на вопрос :))
code_fodder
5
@code_fodder, вам также нужно будет войти с помощью rsync. На самом деле, вам придется снова войти в систему всеми способами. В самом деле, с SSH вы можете по крайней мере выполнить несколько команд за один раз: ssh you@host bash -c "command1;command2;command3; commandN".
Тердон
@terdon Это хорошая точка зрения и работает хорошо, спасибо :)
code_fodder
4

Rsync скопирует весь путь / дерево и проверит файлы, уже находящиеся в месте назначения, и не будет копировать их, если они не изменились. Если вы используете параметр --delete, он удалит все файлы, которые находятся в месте назначения, которых больше нет в источнике. Работает над ssh

Jerm
источник
Я возился с rsync, как кто-то упомянул об этом в другом моем посте относительно scp. У меня установлен rsync на локальном компьютере, но не на удаленном компьютере (встроенный модуль). Я использовал команду, rsync -avz -e shh root@location:/path/to/dest /path/from/hostно после ввода пароля произойдет сбой sh: rsync: not found. Означает ли это, что rsync должен существовать на удаленном компьютере? Благодарность!
code_fodder
1
@code_fodder Да, ему нужна программа, запущенная в удаленной системе, чтобы указать, что делать. Это не прямая программа копирования
канадец Люк
@CanadianLuke ... блин :(
code_fodder
@code_fodder просто установите его! Более полезного, чем нет
канадский Лука
В зависимости от встроенного решения, rsync может или не может быть доступен с какой-либо степенью легкости ... хотя, как я уже сказал, это очень распространенная ситуация, в зависимости от встроенного решения. Примечание: Rsync не обязательно должен работать постоянно, но он должен присутствовать для запуска по требованию.
Джерм
3

Если ваш удаленный SSH-сервер поддерживает подсистему SFTP (в большинстве случаев, если она явно не отключена), вы можете использовать sftpоболочку (или любой другой SFTP-клиент ) для управления файлами и каталогами на удаленном сервере.

К сожалению, основная sftpоболочка, по-видимому, не обрабатывает рекурсивное удаление каталогов; Для того, чтобы удалить каталог, вы должны сначала удалить все его содержимое. Большинство других клиентов (особенно графических) обычно поддерживают это.

(Вы не упоминаете, какая у вас локальная ОС, но если это Linux, вы можете использовать свой собственный файловый менеджер в качестве клиента SFTP с графическим интерфейсом , указав его на URL-адрес, например, sftp: // user @ host / path /. Для Windows, WinSCP является достойным клиентом, а FileZilla - хорошим кроссплатформенным решением.)

Илмари Каронен
источник
1

Чтобы очистить удаленный (/ local) каталог, используйте rsync следующим образом:

rsync -r --delete-excluded --exclude=* / server:/tmp/empty_this_dir/

Будьте осторожны - он удаляет все ниже указанного места назначения!

братан
источник
Я пробовал это, но он возвращает ошибку и не удаляет удаленный каталог. сбой exec-запроса на канале 0 rsync: соединение неожиданно закрыто (получено 0 байт): ошибка отправителя [sender] rsync: необъясненная ошибка (код 255) в io.c (235) [sender = 3.1.2]
xarlymg89
Кажется, что есть проблема с запуском rsync на удаленной стороне или даже с подключением через ssh. Вы можете попробовать ssh server rsync --versionили ssh -v server rsync --versionнайти причину.
братан
Спасибо за ответ, однако я нашел способ решить проблему, не такой элегантный, но с похожими результатами. Попробую еще раз, так как я верю, что придется столкнуться с этим снова.
xarlymg89
0

В качестве альтернативы, монтирование удаленного каталога в локальном, затем удаление его rm -r /path_to_directory_to_removeи, наконец, размонтирование каталога делает свое дело.

Оригинальный ответ здесь: /programming//a/24650511/973919

xarlymg89
источник