Come usare i caratteri jolly (*) quando si copia con scp?


144

Perché non è possibile copiare con SCP quando sto usando *caratteri nel percorso?

scp SERVERNAME:/DIR/* .

Di quale configurazione ha bisogno SCP per consentire *il percorso?

AGGIORNAMENTO: il problema non è sul lato server; pscp sta provando a usare SCPv1, ed è per questo che il messaggio di errore:

riga di comando scp e messaggio di errore relativo a un file chiamato *


Controlla questo, ha funzionato per me: https://superuser.com/a/1390405/445746
AmitM

Risposte:


126

È necessario passare una via di fuga letterale scpper evitare che la macchina remota tratti *come un glob (notare che è doppiamente citato):

scp 'SERVERNAME:/DIR/\*' .

41
O hai bisogno di virgolette o di una barra rovesciata prima della stella, non di entrambe. E SCP non è quello che lo sta espandendo, lo è la shell.
Patrick, il

3
L'hai provato? Ho appena fatto, funziona esattamente come ho descritto (la citazione e la fuga causano errori). User1274964 conferma anche il comportamento nella sua risposta. touch /tmp/abcd.1234; scp 'localhost:/tmp/abcd.\*' ./:scp: /tmp/abcd.*: No such file or directory
Patrick,

2
@Patrick La domanda riguarda l'uso di un asterisco letterale , vale a dire, evitare del tutto il traballante, non su come globare il telecomando.
Chris Down

2
In realtà la domanda è di arrivare pscpsul lato client per consentire il globbing remoto.
Patrick,

1
Sì, non è necessario sfuggire all'asterisco se si utilizzano le virgolette singole
Led

52

Ho trovato il consiglio di Patrick corretto, anche se la risposta di Chris mi ha portato sulla strada giusta. Usa le virgolette e non hai bisogno della barra rovesciata prima dell'asterisco.

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

scp: /tmp/file_num*.csv: nessun file o directory

scp 'SERVERNAME:/tmp/file_num*' .

judgments_for_job_171642.csv 100% 32KB 32.0KB / s 00:00
judgments_for_job_172394.csv 100% 548KB 182.6KB / s 00:03


4
Bene, perché questo significa che vuoi glob sul telecomando. La domanda è su come smettere di globbing sul telecomando (per ottenere un valore letterale *), non su come glob solo sul telecomando.
Chris Down

3
@ChrisDown. No. L'utente desidera che il carattere jolly non sia espanso sull'host e lo desidera espanso sul telecomando, per consentirgli di abbinare più file lì. Nessuno dei file restituiti contiene un '*' letterale. Intendevi " smettere di globbing sull'host "?
Tim Bird,

1

NOTA: soluzione offerta di seguito testata e nota per funzionare correttamente.

Le virgolette singole interromperanno l'espansione variabile se hai aliasato parte del percorso che stai traballando.

Ecco uno script che utilizza le virgolette DOPPIE per il caso d'uso del nome file globbed command-configure_ .tar.gz * usando un percorso aliasato con una variabile:

#!/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 $SCPUSER@$SCPHOST:"$SCPDIRECTORYREMOTE/command-configure_*.tar.gz" $(getent passwd|grep ^$(echo $USEREXECUTINGSCRIPT)|cut -d ':' -f6)/$SCRIPTSDIR/

Dopo la doppia virgoletta di chiusura, la destinazione della directory locale viene costruita semplicemente estraendo la directory home dell'utente specificato da / etc / passwd .

Il comando scp stesso è preceduto da sshpasse -o StrictHostKeyChecking=noper automatizzare completamente il scpcomando senza l'interazione dell'utente. Sembra contorto ma migliore dei percorsi hard-coding che dovrebbero cambiare di volta in volta.

Anyhoo, un esempio che usa le doppie virgolette in cui è necessario consentire l'espansione delle variabili nel percorso che stai traballando. HTH

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.