Saya mencoba menyalin semua file yang tidak dimulai dengan huruf "a", di ksh.
Menyalin dari mesin sumber ke mesin tujuan bekerja dengan baik :
scp -p !(a*) user@machine:/path/directory/.
Tetapi, jika saya berada di server tujuan dan ingin menyalin dari server sumber, gagal:
scp -p user@machine:/path/!(a*) .
Ada ide?
Apa yang saya temukan adalah bahwa pada mesin HP-UX yang lebih lama (parisc 11.11), saya harus menggunakan [^ a] * Tapi, pada mesin yang lebih baru (parisc 11.31 dan yang lebih baru) ia bekerja dengan! (A *)
Inilah yang akhirnya saya lakukan. Dan itu bekerja:
sumber
Nama jarak jauh yang dilewati
scp
sebenarnya ditafsirkan sebagai daftar pola yang dipisahkan oleh spasi di sisi jarak jauh. Ini sering menjengkelkan ketika Anda mencoba menyalin file yang namanya mengandung spasi, tetapi ini berguna:scp -p 'user@machine:/path/a*' .
akan menyalin semua file yang namanya dimulai dengana
.Perintah Anda akan bekerja jika Anda mengutip polanya sehingga ditafsirkan dari jarak jauh daripada lokal, asalkan Anda melewati rintangan lain. Polanya
!(a*)
bukan pola shell dasar, ini adalah ekstensi ksh (yang bash dan zsh juga mendukung jika Anda mengatur opsi yang sesuai). Jadi ini hanya akan berfungsi jika shell jarak jauh Anda adalah ksh, tidak jika itu shell lain dan Andaexec ksh
dari.profile
atau yang serupa.Cara mudah, kecuali Anda berada di lingkungan yang terbatas atau antik, adalah melupakannya
scp
. Anda ingin file jarak jauh berfungsi seperti file lokal, jadi buatlah file lokal: mount direktori jarak jauh dengan sshfs . Ini membutuhkan FUSE pada mesin lokal dan server SFTP (yaitusftp-server
executable yangsshd
diluncurkan) pada mesin jarak jauh.sumber