Ketika saya berlari svn st | awk '{print $2}'
, saya mendapatkan:
a.py
b.py
c.py
Lalu saya ingin scp
file-file ini ke server jauh. Saya telah mencoba:
svn st | awk '{print $2}' | xargs scp my_name@my_server:~/
Tapi itu tidak berhasil. Apa perintah yang tepat untuk melakukan ini?
Terima kasih!
svn st | awk '{print $2}' | xargs -J % scp % my_name@my_server:~/
Seharusnya saya membaca halaman manualxargs
sebelum bertanya;)-Iz
bukan-iz
-iz
pada Solaris, dan selalu berhasil. Terima kasih untuk penunjuknya.-I
. Halaman manual AIX (6.1) mengatakan-i
sudah usang dan-I
harus digunakan. Solaris 10 (dan 9) memiliki keduanya-i
dan-I
.-i
sejak Solaris 2.5. menjadi tua adalah urusan yang menyedihkan, teman-teman saya. :)Alasan mengapa ini tidak berhasil adalah karena Anda disuruh
xargs
lariUrutan argumen tidak sesuai dengan apa yang ingin Anda lakukan. Salah satu solusinya adalah memaksa nama file muncul sebelum tujuan pada baris perintah. Ini membutuhkan GNU xargs (yaitu Linux atau Cygwin). Sementara kita melakukannya, kita dapat
-d '\n'
memastikan bahwa setiap nama file yang tidak mengandung baris baru akan berfungsi (tanpa-d
, xargs mengharapkan beberapa kutipan aneh dari inputnya); ini tidak perlu jika Anda bekerja dengan pohon sumber perangkat lunak khas, di mana nama file cenderung sangat jinak.Kelemahan dari metode ini adalah yang
scp
dipanggil secara terpisah untuk setiap file. Jika Anda menyalin banyak file kecil, itu bisa membuat perbedaan yang signifikan, karena koneksi SSH membutuhkan waktu agak lama untuk dibuat. Anda dapat mempersingkat waktu per-koneksi dengan menggunakan koneksi master SSH (yang melampaui cakupan jawaban ini, lihat manual, terutama opsiControlMaster
danControlPath
di dalamnya.ssh/config
).Cara untuk memaksa argumen berada di tempat yang tepat adalah melalui shell perantara. Ini adalah teknik umum untuk menyusun ulang argumen saat menggunakan
xargs
ataufind … -exec
.Kemungkinan lain adalah menggunakan
rsync
bukanscp
. Anda dapat melewatirsync
daftar nama file pada input standar. Karenarsync
mengharapkan daftar pola dan bukan daftar nama file, ini mensyaratkan bahwa nama file Anda tidak mengandung karakter wildcard (khusus, tidak ada baris baru, tidak ada\[*?
dan tidak ada inisial#
atau;
).sumber