Komut satırından HTTPS aracılığıyla bir dizini WebDAV sunucusuna özyinelemeli olarak nasıl yükleyebilirim?


12

Oldukça basit bir durumla karşılaşıyorum, olduğu gibi HTTPS üzerinden erişilebilen bir WebDAV sunucusuna büyük bir dosya ağacı yüklemeliyim . Yüklemeyi yalnızca komut satırı içeren bir linux kutusundan başlatmalıyım. Kutuya programlar yükleyebilirim.

Kadavra denedim ama özyinelemeli dizin yüklemeyi desteklemiyor.

Bunu başarmak için basit araçlar / senaryolar biliyor musunuz?


Tamam, bunu yapan bir şey buldum.

Ben davpush.plburada bulabilirsiniz komut dosyasından başladı https://github.com/ptillemans/davpush

Bazı değişikliklere ihtiyaç duyuldu:

  • yerine tüm " dav://" den " https://"
  • " print POUT "open";" önce " print POUT $script;" ekle

Lanet olsun, sadece kaba bir dizin yüklemek için bir perl betiğini kesmek zorunda. Hala basit araçlar / komut dosyaları arıyorum.

Yanıtlar:


2

Deneyin gnomevfs-copy:

Düzenleme: gvfs-copy yinelemeli değildir. Ben yamalı ama henüz kodu yayınlamak için havi. Bu arada, perldav'dan dave kontrol edin . Yinelemeli transferler yapar.

Sigortayı devre dışı bırakmadıysanız , davfs2'yi deneyebilirsiniz

Kendi aracınızı kodlamak konusunda olumsuz davranmıyorsanız, gvfs kullanabilir ve gvfs-copy kaynak kodundan ilham alabilirsiniz.

Benzer bir sorun yaşıyorum, bu yüzden daha iyi bir çözümle geri gelebilirim


kio-client da bunu yapabilirdi. Ne yazık ki oldukça kısıtlı bir kutu ve gnomevfs-copy veya kio-client yüklü değil.
eskatos

Mümkünse dave deneyin. Özyinelemeli olarak çalışır (ama ne yazık ki bana, sunucudan çoklu durum yanıtını anlamıyor)
user36520

dave hedef sunucu ile yaptı, teşekkürler! Aslında o kadar perl HTTP :: DAV API kullanarak kadavra kullanan davpush komut dosyası dayalı yaptığım kadar değil. Ancak dave ile, bir grup komut ile bir komut dosyası kolayca yazılamaz çünkü sadece interaktiftir. Yanıt kabul edildi :)
eskatos

8

İşte kadavra kullanarak tha yapmanıza izin veren hızlı bir saldırıya uğramış kabuk betiği :

#!/bin/sh

usage () { echo "$0 <src> <cadaver-args>*" >/dev/stderr; }
error () { echo "$1" >/dev/stderr; usage; exit 1; }

test $# '<' 3 || \
    error "Source and cadaver arguments expected!";

src="$1"; shift;
test -r "$src" || \
    error "Source argument should be a readable file or directory!";

cd "$(dirname "$src")";
src="$(basename "$src")";
root="$(pwd)";
rc="$(mktemp)";
{
    find "$src" '(' -type d -a -readable ')' \
    -printf 'mkcol "%p"\n';
    find "$src" '(' -type f -a -readable ')' \
    -printf 'cd "%h"\nlcd "%h"\n'            \
    -printf 'mput "%f"\n'                    \
    -printf 'cd -\nlcd "'"$root"'"\n';
    echo "quit";
} > "$rc";

cadaver -r "$rc" "$@";
rm -f "$rc";

Adını Eğer davcpy.shbir komutla gibi o zaman

davcpy.sh "<local-directories>/<dirname>" "https://<target-website>/<some-directories>/"

,

<local-directories>/<dirname>

adlı uzak bir

<some-directories>/<dirname>

Komut dizisi oluşturma özelliğini cadaver, oturum açma / parolaların etkileşimli olarak yazılmasına hala izin vermek için kullandığını unutmayın . Boşluk içeren garip dosya ve dizin adlarını işlemek için yeterince sağlam olduğunu düşünüyorum, ancak böyle bir durumu test etmedim.


2

Bir çözüm Rclone olabilir . Bu, rsync'e benzer, WebDAV'ı (diğerlerinin yanı sıra) destekleyen tek yönlü bir komut satırı senkronizasyon programıdır. Hedefte varolan dosyaları atlayarak bir dizini yinelemeli olarak kopyalayabilir. Senkronizasyon davranışını kontrol etmek için bazı komut satırı seçeneklerine sahiptir; örneğin, hedef dosyaların kaynaktan silinmeleri durumunda silinmesini isteyip istemediğiniz. Birçok dağıtım için paketler vardır, ancak düz ikiliyi de yükleyebilir ve çalıştırabilirsiniz. İlk kez bir "uzaktan kumanda" tanımlamanız gerekir:

rclone config create my-remote webdav \
    url https://my-webdav-server/my-dir/ \
    vendor other \
    user 'onno'  pass 'mypasswd'

Bundan sonra, dosyaları ve dizinleri kopyalayabilir veya senkronize edebilirsiniz:

rclone copy /home/onno/mydir my-remote:

1

Nberth'in cevabının OSX üzerinde çalışan bir değişikliği:

#!/bin/sh

usage () { echo "$0 <src> <cadaver-args>*" >/dev/stderr; }
error () { echo "$1" >/dev/stderr; usage; exit 1; }

test $# '<' 3 || \
    error "Source and cadaver arguments expected!";

src="$1"; shift;
test -r "$src" || \
    error "Source argument should be a readable file or directory!";

cd "$(dirname "$src")";
src="$(basename "$src")";
root="$(pwd)";
rc="$(mktemp -t davcopy)";

{
    find "$src" -type d | xargs -I{} echo 'mkcol '{}
    find "$src" -type f \
    -exec echo 'cd '$(basename {}) \; \
    -exec echo 'lcd '$(basename {}) \; \
    -exec echo 'mput '{} \; \
    -exec echo 'cd -' \; \
    -exec echo 'lcd '"$root" \;
    echo "quit";
} > "$rc";

cadaver -r "$rc" "$@";
rm -f "$rc";

Kullanım aynı. Nordth'un cevabından alıntı:

[Yukarıdaki] davcpy.sh olarak adlandırılmışsa,

davcpy.sh "<local-directories>/<dirname>" "https://<target-website>/<some-directories>/"

,

<local-directories>/<dirname>

adlı uzak bir

<some-directories>/<dirname>

0

Ubuntu Linux'tayım. Fuse, (Userspace içindeki Dosya Sistemi) ve mountdavfs (davfs2) yardımıyla Webdav sunucusuna bir alt dizini yerel klasör olarak bağlayabilirsiniz.

Terminalinizi açın ve aşağıdaki gibi devam edin:

  • Henüz yoksa davfs2'yi yükleyin: sudo apt-get install davfs2

  • Webdav sunucusuna bağlanma:

    sudo mount.davfs -o user=knb,rw https://webdav.site.de/data /mnt/somedir

(Dosya sisteminin sahibi girilmelidir, aksi takdirde yazma hakkı yoktur)

Ayrıca bu satırları girmek zorunda kaldı /etc/dafs2/davfs2.conf:

use_proxy       0         
use_locks       0
if_match_bug    1

Bkz. Https://bugs.launchpad.net/ubuntu/+source/davfs2/+bug/466960

mount - Komut - Sonuç (Son çıktı satırı):

https://webdav.mysite.de/icdp on /media/somedir type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=0,allow_other,max_read=16384,uid=1000,gid=0,helper=davfs)

Ayrıca garip bir dosya olup olmadığını kontrol edin ~/.davfs2/secrets- yeniden başlatmalardan kurtulan kalıcı bağlantılar için gerekli olabilir.

Artık komutları verebilirsiniz cp -vr /data/myphotos /media/somedirve dosyalar özyinelemeli olarak kopyalanır ve webdav sitesine yüklenir.

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.