Yanıtlar:
bunu dene. xargs'ın son sürümleriyle çalışmalıdır.
svn st | awk '{print $2}' | xargs -iz scp z my_name@my_server:
alternatif olarak, dosyalar üzerinden döngü yapabilirsiniz.
for file in $(svn st | awk '{print $2}'); do scp $file my_name@my_server: ; done
-Iz
değil-iz
-iz
Solaris üzerinde kullanıyorum ve her zaman işe yarıyor. İşaretçi için teşekkürler.
-I
. AIX (6.1) kılavuz sayfasının -i
eski olduğunu ve -I
kullanılması gerektiğini söylüyor . Solaris 10 (9), hem de sahiptir -i
ve -I
.
-i
Solaris 2.5'ten beri kullanıyorum . yaşlanmak üzücü bir durum, dostlarım. :)
Bunun işe yaramamasının sebebi xargs
koşmayı söylemen
scp my_name@my_server:~/ a.py b.py c.py
Bağımsız değişkenlerin sırası, yapmak istediğiniz şeye karşılık gelmez. Bir çözüm, dosya adlarını komut satırındaki hedefin önünde görünmeye zorlamaktır. Bunun için GNU xargs (yani Linux veya Cygwin) gerekir. Biz -d '\n'
oradayken, satırsonu içermeyen herhangi bir dosya adının çalışmasını sağlamak için geçebiliriz ( -d
xargs, girdisinin garip bir şekilde alıntılanmasını beklemez); dosya adlarının çok uysal olduğu tipik yazılım kaynak ağaçları ile çalışıyorsanız bu gerekli değildir.
svn st | awk '{print $2}' |
xargs -d\\n -I{} scp {} my_name@my_server:~/
Bu yöntemin bir dezavantajı, scp
her dosya için ayrı olarak adlandırılmasıdır. Çok sayıda küçük dosya kopyalıyorsanız, SSH bağlantısı kurmak biraz zaman aldığından, bu önemli bir fark yaratabilir. Büyük ölçüde (en başta, manuel bakınız bu cevap kapsamını outstide olduğu bir SSH ana bağlantı kullanarak bağlantı başına süresini kısaltabilir ControlMaster
ve ControlPath
seçenekler içinde .ssh/config
).
Argümanları doğru yerde olmaya zorlamanın bir yolu, bir ara kabuktan geçmektir. xargs
Veya parametresini kullanırken argümanları yeniden sıralamak için genel bir tekniktir find … -exec
.
svn st | awk '{print $2}' |
xargs -d\\n sh -c 'scp "$@" "$0" my_name@my_server:~/
Başka bir olasılık rsync
yerine kullanmaktır scp
. rsync
Standart girişe dosya adlarının bir listesini iletebilirsiniz . Yana rsync
beklentiden bir desen listesi ve dosya adlarının bir listesini, bu dosya adları herhangi joker karakterleri içermeyen gerektirir (özellikle hiçbir yeni satırlar, hayır \[*?
ve hayır başlangıç #
veya ;
).
svn st | awk '{print $2}' |
rsync -a --include-from=- --exclude='*' . my_name@my_server:~/
svn st | awk '{print $2}' | xargs -J % scp % my_name@my_server:~/
adam sayfasınıxargs