Curl kullanarak FTP üzerinden birden fazla dosya yükleme


14

Geçerli klasördeki tüm metin dosyalarını FTP üzerinden curl kullanarak bir sunucu konumuna yüklemeye çalışıyorum. Aşağıdaki satırı denedim:

 curl -T "{file1.txt, file2.txt}" ftp://XXX --user YYY

burada XXX sunucunun IP adresidir ve YYY kullanıcı adı ve şifredir.

File1.txt dosyasını sunucuya başarıyla aktarabiliyorum, ancak ikinci dosyadan 'Dosya_adı' açılamıyor!

Dosya adlarını değiştirdim ve file1.txt için değil file2.txt için çalıştı. Sözdizimini yanlış anladım, ancak kılavuzun söylediği bu mu?

Ayrıca, ideal olarak böyle bir şey yapabilirdim:

 curl -T *.txt ftp://XXX --user YYY

çünkü her zaman geçerli klasördeki txt dosyalarının isimlerini veya aktarılacak dosya sayısını bilemeyeceğim.

Ben ls *.txtbir dizi çıktı toplar ve kıvırmak tarafından gerekli çoklu dosya biçimine koymak bir bash komut dosyası yazmak zorunda olabilirim .

Daha önce bash betikleri yapmadım - bu bunu başarmanın en basit yolu mu?

Yanıtlar:


20

İlk komutunuz boşluk olmadan çalışmalıdır:

curl -T "{file1.txt,file2.txt}" ftp://XXX/ -user YYY

Ayrıca yukarıdaki URL'lerdeki "/" karakterine dikkat edin .

Bu, curl'un "-T" opsiyonu ile ilgili manuel girişi:

-T, --upload dosyası

Bu, belirtilen yerel dosyayı uzak URL'ye aktarır. Belirtilen URL'de dosya parçası yoksa, Curl yerel dosya adını ekler. Hiçbir dosya adı olmadığını Curl kanıtlamak için son dizinde bir son / / kullanmanız gerektiğini unutmayın veya curl son dizin adınızın kullanılacak uzak dosya adı olduğunu düşünecektir. Bu büyük olasılıkla yükleme işleminin başarısız olmasına neden olacaktır. Bu bir HTTP (S) sunucusunda kullanılırsa, PUT komutu kullanılır.

Belirli bir dosya yerine stdin kullanmak için "-" (tek bir tire) dosya adını kullanın. Alternatif olarak, "." Dosya adı stdin yüklenirken sunucu çıktısının okunmasına izin vermek için stdin'i engellemeyen modda kullanmak için "-" yerine (tek bir nokta) belirtilebilir.

Komut satırında her URL için bir -T belirtebilirsiniz. Her -T + URL çifti neyin nereye nereye yükleneceğini belirtir. curl ayrıca -T argümanının "globbing" i destekler, yani URL'de desteklenen aynı URL globbing stilini kullanarak tek bir URL'ye birden fazla dosya yükleyebilirsiniz:

curl -T "{file1,file2}" http://www.uploadtothissite.com

ya da

curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/

"* .txt" genişletmesi işe yaramaz çünkü curl URL'lerle aynı sözdizimini destekler:

Parantez içindeki parça kümelerini aşağıdaki gibi yazarak birden çok URL veya URL'nin bir kısmını belirtebilirsiniz:

http: // site . {bir, iki, üç} .com

veya aşağıdaki gibi [] kullanarak alfasayısal seri dizileri alabilirsiniz:

ftp://ftp.numericals.com/file[1-100].txt

ftp://ftp.numericals.com/file[001-100 WES.txt ( baştaki sıfırlarla)

ftp://ftp.letters.com/file[az].txt

[...]

Komut satırı isteminden çağrıldığında [] veya {} dizilerini kullanırken, kabuğun buna müdahale etmesini önlemek için büyük olasılıkla tam URL'yi çift tırnak içine almanız gerekir. Bu, '&', '?' Gibi özel olarak ele alınan diğer karakterler için de geçerlidir. ve '*'.

Ancak "normal" kabuklu globbing'i şu şekilde kullanabilirsiniz:

curl -T "{$(echo *.txt | tr ' ' ',')}" ftp://XXX/ -user YYY

(Son örnek tüm kabuklarda veya herhangi bir egzotik dosya adında çalışmayabilir.)


$(perl -e 'print join(",",@ARGV)' *.txt)dosya adlarını boşluklarla doğru şekilde işleyecektir.
ivan_pozdeev
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.