Re: [CBLX] y a-t-il un bug dans scp ?

[ Thread Index | Date Index | More lists.tuxfamily.org/carrefourblinux Archives ]


Bonjour Léa,

Le 14/11/2022 à 15:48, Léa Gris a écrit :
> Le 14/11/2022 à 15:08, Didier Spaier écrivait :
>> Bonjour,
>>
>> Je n'ai pas la réponse mais tu peux envoyer les 20 fichiers en une seule ligne
>> de commande.
>> si $liste="f1 f2 f3 ... f20":
>> echo "$liste"|while read $i; do scp $i aldo@xxxxxxxxxxx:~ ; done
> 
> Non vraiment trop de mauvaise pratique du shell :
> 
> On ne range pas une liste dans un chaîne séparée par des espaces ; on la range
> dans un tableau liste=('f1' 'f2' 'f3' ... 'f20').
> for src in "${liste[@]}"; do scp "$src" aldo@xxxxxxxxxxx:; done
Pas ici. Je refuse les bashismes!

Drew DeVault t'expliquera pourquoi mieux que je ne saurai le faire:
https://drewdevault.com/2018/02/05/Introduction-to-POSIX-shell.html

Pour info ce petit script (un peu moins de 3000 lignes):
https://github.com/DidierSpaier/slint-translations/blob/main/source/functions
n'en comporte aucun (vérifié avec shellcheck) et fonctionne.

Dans le même esprit celui-là:
https://github.com/DidierSpaier/convtags/blob/master/convtags
ne comporte aucune extension GNU à sed tel que spécifié par:
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html

> ou simplement:
> for src in 'f1' 'f2' 'f3'; do scp "$src" aldo@xxxxxxxxxxx:; done

Là, je suis d'accord.
En outre, je me suis aperçu après coup que pour que ma proposition fonctionne
j'aurais dû écrire quelque chose comme:
echo "f1 f2 f3 <suite>"|sed "s@ @\n@g"|while read $i; do scp $i
aldo@xxxxxxxxxxx:~ ; done

> Le chemin d’une machine distante user@xxxxxxxxxxx: pointe toujours vers le
> dossier home de l'utilisateur. Donc inutile de spécifier le tilde.
> Maintenant si tu veux désigner le dossier home d’un autre utilisateur que celui
> qui se connecte, il faut écrire albert@xxxxxxxxxxx:~bernard/
> Le / de fin est nécessaire pour bien spécifier que la destination est un dossier
> et éviter comme dans ton cas que la taille considérée soit celle de l’inode du
> dossier qui est juste la taille allouée pour contenir les noms de fichiers du
> dossier et qui est visible avec la commande :
> ls -ld ~
> 
> On ajoute toujours -r à read sinon ça interprète les \
> On met toujours une variable shell entre guillemets pour éviter d'étendre le
> contenu comme un motif de recherche (globbing pattern) et découpage selon le
> contenu de la variable d’environnement IFS.
> 
> Une très bonne lecture :
> https://mywiki.wooledge.org/BashPitfalls
> 
> Et pour revenir à scp. rsync est un remplaçant bien plus moderne qui sait gérer
> la compression, la reprise et les conditions de mises à jour ou synchronisations
> entre dossiers de et vers une machine distante, ou localement.

Pour juste envoyer un fichier ou un répertoire j'utilise sftp qui fonctionne aussi.

Bonne soirée,
Didier

-- 
   CBLX - CarrefourBLinuX MailingListe 
   Pour obtenir de l'aide, envoyez le sujet  help  à: 
   carrefourblinux-request@xxxxxxxxxxxxxxxxxxx
   Archives: 
   http://listengine.tuxfamily.org/lists.tuxfamily.org/carrefourblinux
   ou 
   http://www.mail-archive.com/carrefourblinux@xxxxxxxxxxxxxxxxxxx/


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/