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
-Izdeğil-iz
-izSolaris ü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 -ieski olduğunu ve -Ikullanılması gerektiğini söylüyor . Solaris 10 (9), hem de sahiptir -ive -I.
-iSolaris 2.5'ten beri kullanıyorum . yaşlanmak üzücü bir durum, dostlarım. :)
Bunun işe yaramamasının sebebi xargskoş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 ( -dxargs, 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ı, scpher 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 ControlMasterve ControlPathseçenekler içinde .ssh/config).
Argümanları doğru yerde olmaya zorlamanın bir yolu, bir ara kabuktan geçmektir. xargsVeya 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 rsyncyerine kullanmaktır scp. rsyncStandart girişe dosya adlarının bir listesini iletebilirsiniz . Yana rsyncbeklentiden 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