Existe-t-il d'autres commandes comme scp mais pour supprimer des fichiers et des dossiers?

13

J'utilise scp pour copier des trucs vers un emplacement distant. Mais parfois scp ne fonctionne pas comme prévu, j'ai constaté que parfois la copie ne se termine pas correctement (peut-être lorsque j'ai ajouté de nouveaux fichiers dans le dossier que je copie).

Je veux donc d'abord supprimer le dossier distant, puis faire la copie pour m'assurer d'avoir exactement ce dont j'ai besoin.

Existe-t-il d'autres commandes comme scp (par exemple srm ou smv)? Ou existe-t-il un moyen de supprimer les dossiers et fichiers distants?

code_fodder
la source

Réponses:

19

La sshcommande vous permettra d'exécuter à peu près n'importe quelle commande sur l'hôte distant, par exemple,

ssh yourlogin@remotehost rmdir somedir

où dans cet exemple somedirest relatif au répertoire personnel de votre connexion.

garyjohn
la source
Merci pour ça. Le seul problème que j'ai avec la méthode est que chaque fois que vous l'appelez, vous devez vous "connecter" à nouveau :(. Puisque ma cible est intégrée, je ne peux pas utiliser de clés ssh car tout est écrasé, donc j'essaie de faites cela en une seule commande. rsync semble prometteur. Mais, +1 puisque cela répond à la question :))
code_fodder
5
@code_fodder, vous devrez également vous connecter avec rsync. En fait, vous devrez vous reconnecter avec toutes les méthodes. En fait, avec ssh , vous pouvez au moins exécuter plusieurs commandes en une seule fois: ssh you@host bash -c "command1;command2;command3; commandN".
terdon
@terdon Ceci est un bon point et fonctionne bien merci :)
code_fodder
4

Rsync copiera un chemin / arbre entier et vérifiera les fichiers déjà à destination et ne prendra pas la peine de les copier s'ils sont inchangés. Si vous utilisez l'option --delete, elle supprimera tous les fichiers qui se trouvent à la destination qui ne sont plus à la source. Cela fonctionne sur ssh

jerm
la source
Je déconnais avec rsync, comme quelqu'un l'a mentionné dans un autre post à propos de scp. J'ai rsync installé sur mon PC local mais pas sur le PC distant (une unité intégrée). J'utilisais la commande rsync -avz -e shh root@location:/path/to/dest /path/from/hostMais elle échoue après avoir entré le mot de passe en disant sh: rsync: not found. Est-ce à dire que rsync doit exister sur le PC distant? Merci!
code_fodder
1
@code_fodder oui, il a besoin d'un programme s'exécutant sur le système distant pour lui dire quoi faire. Ce n'est pas un programme de copie simple
Canadian Luke
@CanadianLuke ... putain :(
code_fodder
@code_fodder installez-le! Plus utile que non
Canadian Luke
En fonction de la solution intégrée, rsync peut être disponible ou non avec n'importe quel degré de facilité ... bien qu'il s'agisse d'une fonctionnalité très courante, comme je l'ai dit, en fonction de la solution intégrée. Remarque: Rsync ne doit pas être exécuté tout le temps, mais il doit être présent pour être exécuté à la demande.
jerm
3

Si votre serveur SSH distant prend en charge le sous-système SFTP (la plupart le font, sauf s'il a été explicitement désactivé), vous pouvez utiliser le sftpshell (ou tout autre client SFTP ) pour manipuler des fichiers et des répertoires sur le serveur distant.

Malheureusement, une chose que le sftpshell de base ne gère apparemment pas est la suppression récursive du répertoire; pour supprimer un répertoire, vous devez d'abord supprimer tout son contenu. Cependant, la plupart des autres clients (en particulier ceux graphiques) le prennent généralement en charge.

(Vous ne mentionnez pas votre système d'exploitation local, mais s'il s'agit de Linux, vous pouvez utiliser votre gestionnaire de fichiers natif comme client SFTP GUI en le pointant sur une URL comme sftp: // user @ host / path /. Pour Windows, WinSCP est un client décent et FileZilla est une bonne solution multiplateforme.)

Ilmari Karonen
la source
1

Pour vider un répertoire distant (/ local), utilisez rsync comme ceci:

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

Soyez prudent - il supprime tout en dessous de la destination spécifiée!

mon frère
la source
J'ai essayé cela, mais il renvoie une erreur et ne supprime pas le répertoire distant. échec de la demande d'exécution sur le canal 0 rsync: connexion inopinément fermée (0 octet reçu jusqu'à présent) [expéditeur] erreur rsync: erreur inexpliquée (code 255) sur io.c (235) [expéditeur = 3.1.2]
xarlymg89
Il semble qu'il y ait un problème lors du démarrage de rsync du côté distant ou même de la connexion via ssh. Vous pouvez essayer ssh server rsync --versionou ssh -v server rsync --versiontrouver la raison.
bro
Merci d'avoir répondu, mais j'ai trouvé un moyen de résoudre le problème, pas aussi élégant mais avec des résultats similaires. J'essaierai à nouveau car je pense que je vais devoir y faire face à nouveau.
xarlymg89
0

Comme alternative, monter le répertoire distant dans un répertoire local, puis le supprimer avec rm -r /path_to_directory_to_removeet enfin démonter le répertoire fait l'affaire.

Réponse originale ici: /programming//a/24650511/973919

xarlymg89
la source