scp certains fichiers uniquement

4

J'essaie de copier les fichiers modifiés dans GoDaddy via SSH. Godaddy est terrible et ils ne permettent bien sûr pas de rsync. Je peux utiliser scp, mais je ne veux vraiment que copier les fichiers modifiés. Je ne pense pas que cela soit possible, alors je me demandais si je pourrais peut-être scp uniquement tous les fichiers php.

Il y a beaucoup de sous-répertoires, cependant, je dois donc utiliser l'option -r.

Puis-je utiliser scp pour copier tous les fichiers avec l'extension php, récursivement? comme ça:

scp -r -name "*php" /local/html/ user@server:/home/html/ (ne marche pas)

RÉSULTAT DÉSIRÉ

//on local machine
 $ find ./source  source / 1.php
source / 2.php
source / sous
source / sub / 3.php
source / sub / 4.php
source / sub / DONT-copy.txt
source / sub / DONT-copy.png
source / sub / sub2
source / sub / sub2 / 5.php
source / sub / sub2 / 6.php

// commande pour copier les fichiers  $ [commande scp ici]  // sur le serveur distant  $ find ./destination  destination / 1.php
destination / 2.php
destination / sous
destination / sub / 3.php
destination / sub / 4.php
destination / sub / sub2
destination / sub / sub2 / 5.php
destination / sub / sub2 / 6.php 

CELA NE FONCTIONNE PAS

//on local machine
 $ find ./source  source / 1.php
source / 2.php
source / sous
source / sub / 3.php
source / sub / 4.php
source / sub / DONT-copy.txt
source / sub / DONT-copy.png
source / sub / sub2
source / sub / sub2 / 5.php
source / sub / sub2 / 6.php

// commande pour copier les fichiers  $ cd source; scp -r * .php utilisateur @ distant: / destination  // sur le serveur distant  $ find ./destination  destination / 1.php
destination / 2.php 

Peut-être pourrions-nous essayer d’utiliser find, mais je suis sûr que cela ne fonctionnera pas tel quel :

find ./source -name "*.php" -exec scp {} user@remote:{} \;

Cela ne fonctionnera pas car je ne pense pas que vous puissiez utiliser plusieurs {} opérateurs à trouver.

En outre, il peut être difficile d’aligner les chemins sur le serveur distant, par exemple si find retournait /users/johndoe/documents/source/1.php et vous vouliez que ça finisse à /home/jane/www/destination/1.php sur le serveur distant.

cwd
la source
2
Est-il possible que vous exécutiez une commande (via ssh) sur le serveur distant? Si oui, vous pouvez tarer les fichiers localement et faire un cat phpfiles.tar | ssh user@remote "cd destination && tar cf -" transférer tous vos fichiers en une seule fois.
mpy
Avez-vous réellement essayé votre dernière commande de recherche avec plusieurs {} des jetons? J'ai l'air prometteur (vous pouvez utiliser plusieurs {} ), vous devez peut-être préciser user@remote:~/{} comme destination.
mpy
Oups, cette question était posée il y a près de deux ans ... Je me demande pourquoi elle est apparue au-dessus des questions à présent ...
mpy

Réponses:

2

voici ce que je fais quand un hôte ne permet que de pousser des choses, et pas de rsync:

  • créer un répertoire "shadow" sur votre machine locale pour ressembler à la structure cible
  • utilisation rsync pour pousser à ce répertoire d'ombre, et capturer la sortie (il y a --log-file si vous voulez le scripter)
  • du rsync sortie, déterminez les fichiers que vous devez supprimer, ou pousser et faire une liste
  • peut-être (dépend de la façon dont vous poussez): créez un paquet à partir des fichiers qui ne doivent être modifiés que
  • démarrez votre outil push - ftp, scp, peu importe - et laissez-le fonctionner sur les fichiers de la liste
Florenz Kley
la source
0

Tu ne peux pas faire scp -r *.php destination ?

hari
la source
mais cela va-t-il copier tous les fichiers * .php dans les sous-répertoires?
cwd
@cwd: Quelle est votre exigence exacte?
hari
mis à jour la question
cwd
Je ne suis toujours pas sûr de ce que vous demandez ici. quels fichiers vous voulez copier /local/html? tous les fichiers * .php? seulement changé *.php des dossiers? qu'est-ce que l'argument -name signifier?
hari
-name est le paramètre que rsync utilise pour filtrer uniquement les fichiers php. Je voudrais idéalement copier uniquement les fichiers modifiés (comme rsync), mais comme rsync n'est pas disponible, j'aimerais simplement copier les fichiers php uniquement (pour économiser la bande passante). Cela a-t-il du sens? Je suppose que je pourrais faire un find -exec scp mais j’aurais besoin de saisir le basepath et d’être bien ajouté à l’argument de destination semble juste qu'il devrait y avoir un moyen facile de le faire.
cwd
-1

scp -r utilisateur @ ip: / data / files / *. php / tmp / files /

KBastos
la source