Scp ile kopyalama yaparken joker karakterler (*) nasıl kullanılır?


144

Yoldaki *karakterleri kullanırken neden scp ile kopyalayamıyorum ?

scp SERVERNAME:/DIR/* .

*Yola izin vermek için SCP'nin hangi yapılandırmaya ihtiyacı var ?

GÜNCELLEME: sorun sunucu tarafında değil; pscp SCPv1 kullanmaya çalışıyor ve bu yüzden hata mesajı:

scp komut satırı ve * adlı bir dosyayla ilgili hata mesajı


Bunu kontrol et, benim için çalıştı: https://superuser.com/a/1390405/445746
AmitM

Yanıtlar:


126

scpUzak makinenin *glob gibi davranmasını önlemek için gerçek bir kaçış yapmanız gerekir (iki kez alıntı yapıldığına dikkat edin):

scp 'SERVERNAME:/DIR/\*' .

41
İkinizden de değil, tırnaklardan veya yıldızdan önce bir ters eğik çizgiye ihtiyacınız var. Ve scp onu genişleten değil, kabuk.
Patrick

3
Bunu denediniz mi? Yaptım, aynen tarif ettiğim gibi çalışıyor (alıntı yapmak ve kaçmak başarısızlığa neden oluyor). User1274964, cevabındaki davranışı bile onaylar. touch /tmp/abcd.1234; scp 'localhost:/tmp/abcd.\*' ./:scp: /tmp/abcd.*: No such file or directory
Patrick

2
@Patrick Soru, edebi bir yıldız işareti kullanmak, yani uzaktan kumandada nasıl dolaşacağınızla ilgili değil, tamamen topaklanmadan kaçınmaktır.
Chris Down,

2
Asıl soru, pscpuzaktan küremeye izin vermek için müşteri tarafına geçmekle ilgili.
Patrick

1
Tek tırnak kullanıyorsanız,
Led

52

Chris'in cevabı beni doğru yolda bulsa da Patrick'in tavsiyesini doğru buldum. Tırnak işaretleri kullanın, sonra yıldız işaretinden önce ters eğik çizgiye gerek yoktur.

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

scp: /tmp/file_num*.csv: Böyle bir dosya veya dizin yok

scp 'SERVERNAME:/tmp/file_num*' .

judgments_for_job_171642.csv 100% 32KB 32.0KB / s 00:00
Instagram Hesabındaki Resim ve Videoları judgments_for_job_172394.csv 100% 548KB 182.6KB / s 00:03


4
Doğru, çünkü bu uzaktan kumandayı izlemek istediğiniz anlamına gelir . Sorun , uzaktan kumandada globlamayı nasıl durduracağınız (değişmez elde etmek için *), sadece uzaktan kumandada nasıl boğulacağınızla ilgili değil.
Chris Down,

3
@ChrisDown. Hayır. Kullanıcı jokerin ana bilgisayarda genişletilmemesini ister ve orada birden fazla dosyayla eşleşmesini sağlamak için uzaktan kumandada genişletilmesini ister. Döndürülen dosyaların hiçbiri hazır bilgi dizisinde '*' yok. " Ana bilgisayarda konuşmayı bırak " mı demek istedin ?
Tim Bird

1

NOT: Aşağıda sunulan çözüm test edilmiştir ve doğru çalıştığı bilinmektedir.

Tek tırnaklar, hedeflediğiniz yolun bir kısmını takma iseniz değişken genişlemesini bozacaktır.

Burada , değişkenli bir takma adı olan yolu kullanan globbed dosyaadı command-configure_ .tar.gz * kullanım durumu için DOUBLE tırnaklarını kullanan bir komut dosyası :

#!/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/

Kapanış çift teklifinden sonra, yerel dizin hedefi, yalnızca belirtilen kullanıcının ana dizinini / etc / passwd dizininden çıkarmak suretiyle oluşturulur .

SCP komutun kendisi ile başında olan sshpassve -o StrictHostKeyChecking=notamamen otomatik hale getirmek için scpkullanıcının müdahalesi olmadan komutu. Kıvrımlı fakat zaman zaman değişmesi beklenen kodlama yollarından daha iyi görünüyor.

Her neyse, globbing yolunuzdaki değişkenlerin genişlemesine izin verilmesi gereken çift tırnak kullanan bir örnek. HTH

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.