it-swarm-eu.dev

Jak používat zástupné znaky (*) při kopírování pomocí scp?

Proč nemohu kopírovat pomocí scp, když používám * znaků v cestě?

scp SERVERNAME:/DIR/* .

Jaká konfigurace SCP potřebuje, aby umožnila * na cestě?

UPDATE: problém není na straně serveru; pscp se pokouší použít SCPv1, a proto chybová zpráva:

scp commandline and error message regarding a file called *

153
LanceBaynes

Musíte předat doslovný útěk scp, abyste se vyhnuli tomu, aby se vzdálený stroj léčil * jako glóbus (všimněte si, že je uváděn dvakrát):

scp 'SERVERNAME:/DIR/\*' .
133
Chris Down

Patrickovu radu jsem zjistil, že je správná, i když Chrisova odpověď mě dostala na správnou cestu. Použijte uvozovky a poté před hvězdičkou nepotřebujete zpětné lomítko.

scp 'SERVERNAME:/tmp/file_num\*' .

scp: /tmp/file_num*.csv: Žádný takový soubor nebo adresář neexistuje

scp 'SERVERNAME:/tmp/file_num*' .

soudy_for_job_171642.csv 100% 32KB 32,0KB/s 00:00
soudy_for_job_172394.csv 100% 548KB 182,6KB/s 00:03

62
user1274964

POZNÁMKA: Řešení nabízené níže testováno a je známo, že funguje správně.

Jednorázové uvozovky přeruší expanzi proměnných, pokud jste aliasy část cesty, kterou jste globbing.

Zde je skript, který používá DVOJITÉ uvozovky pro případ použití globbed filename command-configure_ . tar.gz * pomocí cesty pojmenované pomocí proměnné:

#!/bin/bash

USEREXECUTINGSCRIPT='admin'
SCRIPTSDIR="myscripts"

SCPUSER='terrencehoulahan'
SCPUSERPASSWD='Change-Me'
SCPHOST='1.2.3.4'
SCPDIRECTORYREMOTE='/Users/terrencehoulahan/Downloads/Ubuntu/18.04'

## Uncomment appropriate below command for your distro to install "sshpass"
#apt-get -y sshpass
#yum -y install sshpass

sshpass -p "$SCPUSERPASSWD" scp -o StrictHostKeyChecking=no [email protected]$SCPHOST:"$SCPDIRECTORYREMOTE/command-configure_*.tar.gz" $(getent passwd|grep ^$(echo $USEREXECUTINGSCRIPT)|cut -d ':' -f6)/$SCRIPTSDIR/

Po uzavření dvojité nabídky je cíl lokálního adresáře vytvořen pouhým extrahováním domovského adresáře určeného uživatele z /etc/passwd .

Samotný příkaz scp má předpony sshpass a -o StrictHostKeyChecking=no k plné automatizaci příkazu scp bez zásahu uživatele. Vypadá to spletitě, ale lépe než cesty s pevným kódováním, u nichž se očekává, že se čas od času změní.

Anyhoo, příklad používající dvojité uvozovky, kde je třeba povolit expanzi proměnných na cestě, kterou jste globping. HTH

1
F1Linux

Pro mě to funguje jinak v bash a v c-Shell. Neptejte se, proč používám c-Shell. V bash nepotřebuju '' - v c-Shell ano. Zdá se tedy, že v různých linuxových verzích manipulují s glóby jinak.

0
Sammy777