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:
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/\*' .
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
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
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.