Existem outros comandos como o scp, mas para excluir arquivos e pastas?

13

Estou usando o scp para copiar coisas para um local remoto. Mas, às vezes, o scp não funciona conforme o esperado, mas algumas vezes a cópia não é concluída corretamente (possivelmente quando adicionei novos arquivos à pasta que estou copiando).

Então, quero remover a pasta remota primeiro e depois fazer a cópia para garantir que eu tenha exatamente o que preciso.

Existem outros comandos como o scp (por exemplo, srm ou smv)? Ou existe uma maneira de remover pastas e arquivos remotos?

code_fodder
fonte

Respostas:

19

O sshcomando permitirá que você execute praticamente qualquer comando no host remoto, por exemplo,

ssh yourlogin@remotehost rmdir somedir

onde neste exemplo somediré relativo ao diretório inicial do seu logon.

garyjohn
fonte
Obrigado por isso. O único problema que tenho com o método é que, toda vez que você o chama, é necessário "logar" novamente :(. Como meu destino está incorporado, não posso usar chaves ssh porque tudo fica sobrescrito, então estou tentando fazer isso em um comando olhares rsync promissor, mas, uma vez que este faz responder à pergunta :))..
code_fodder
5
@code_fodder você também precisará fazer o login com o rsync. Na verdade, você precisará fazer login novamente com todos os métodos. Na verdade, com ssh você pode pelo menos executar vários comandos de uma só vez: ssh you@host bash -c "command1;command2;command3; commandN".
terdon
@terdon Este é um ponto bom e funciona graças nicley :)
code_fodder
4

O Rsync copiará um caminho / árvore inteiro e verificará os arquivos que já estão no destino e não se incomodará em copiá-los se eles não forem alterados. Se você usar a opção --delete, ele excluirá todos os arquivos que estão no destino que não estão mais na origem. Funciona sobre ssh

jerm
fonte
Eu estava brincando com o rsync, como alguém mencionou isso em outro post meu sobre scp. Tenho o rsync instalado no meu PC local, mas não no PC remoto (uma unidade incorporada). Eu estava usando o comando rsync -avz -e shh root@location:/path/to/dest /path/from/hostMas ele falha após digitar a senha sh: rsync: not found. Isso significa que o rsync precisa existir no PC remoto? Obrigado!
code_fodder
1
@ code_fodder sim, ele precisa de um programa em execução no sistema remoto para dizer o que fazer. Não é um programa de cópia direta
Canadian Luke
@CanadianLuke ... damn :(
code_fodder
@code_fodder basta instalá-lo! Mais útil, então não
Canadian Luke
Dependendo da solução incorporada, o rsync pode ou não estar disponível com algum grau de facilidade ... embora seja uma utilidade muito comum, como eu disse, dependendo da solução incorporada. Nota: O Rsync não precisa estar em execução o tempo todo, mas precisa estar presente para ser executado sob demanda.
Jerm #
3

Se o seu servidor SSH remoto suportar o subsistema SFTP (a maioria faz, a menos que tenha sido explicitamente desativado), você poderá usar o sftpshell (ou qualquer outro cliente SFTP ) para manipular arquivos e diretórios no servidor remoto.

Infelizmente, uma coisa que o sftpshell básico aparentemente não trata é a remoção recursiva de diretório; para excluir um diretório, você deve excluir todo o seu conteúdo primeiro. A maioria dos outros clientes (especialmente os gráficos) normalmente o suporta.

(Você não menciona qual é o seu sistema operacional local, mas se for Linux, poderá usar o gerenciador de arquivos nativo como cliente SFI da GUI , apontando-o para uma URL como sftp: // user @ host / path /. Para Windows, WinSCP é um cliente decente e o FileZilla é uma boa solução entre plataformas.)

Ilmari Karonen
fonte
1

Para esvaziar um diretório remoto (/ local), use rsync assim:

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

Tenha cuidado - ele remove tudo abaixo do destino especificado!

Mano
fonte
Eu tentei isso, mas ele retorna um erro e não remove o diretório remoto. pedido exec falhou no canal 0 rsync: ligação inesperadamente fechada (0 bytes recebidos até agora) [remetente] erro rsync: erro inexplicável (código 255) em io.c (235) [remetente = 3.1.2]
xarlymg89
Parece que há um problema ao iniciar o rsync no lado remoto ou até mesmo conectar via ssh. Você pode tentar ssh server rsync --versionou ssh -v server rsync --versionencontrar o motivo.
bro
Obrigado por responder, no entanto, encontrei uma maneira de resolver o problema, não tão elegante, mas com resultados semelhantes. Vou tentar novamente, pois acredito que vou ter que enfrentá-lo novamente.
xarlymg89
0

Como alternativa, montar o diretório remoto em um local, removê-lo rm -r /path_to_directory_to_removee, finalmente, desmontar o diretório faz o truque.

Resposta original aqui: /programming//a/24650511/973919

xarlymg89
fonte