Jak rekurencyjnie przesłać katalog na serwer WebDAV przez HTTPS z wiersza poleceń?

12

Mam do czynienia z dość prostą sytuacją, muszę wgrać duże drzewo plików na serwer WebDAV , które jest osiągalne przez HTTPS. Muszę rozpocząć przesyłanie tylko od pola linux z wierszem poleceń. Mogę instalować programy na pudełku.

Próbowałem Cadaver, ale nie obsługuje rekurencyjnego przesyłania katalogu.

Czy znasz proste narzędzia / skrypty do osiągnięcia tego?


Ok, znalazłem coś, co to zrobiło.

Zacząłem od davpush.plskryptu, który można znaleźć tutaj https://github.com/ptillemans/davpush

Potrzebne były pewne zmiany:

  • zamień wszystkie „ dav://” na „ https://
  • dodaj „ print POUT "open";” przed „ print POUT $script;

Cholera, trzeba zhakować skrypt Perla, aby po prostu załadować niegrzeczny katalog. Wciąż szukam prostych narzędzi / skryptów.

eskatos
źródło

Odpowiedzi:

2

Spróbuj gnomevfs-copy:

Edycja: gvfs-copy nie jest rekurencyjny. Poprawiłem go, ale mimo to opublikowałem kod. W międzyczasie sprawdzić Dave z perldav. Dokonuje transferów rekurencyjnych.

Jeśli nie masz wyłączonego bezpiecznika, możesz wypróbować davfs2

Jeśli nie masz nic przeciwko kodowaniu własnego narzędzia, możesz użyć gvfs i czerpać inspirację z kodu źródłowego gvfs-copy

Mam podobny problem, więc mogę wrócić z lepszym rozwiązaniem

użytkownik36520
źródło
Kio-Client też mógł to zrobić. Niestety jest to dość ograniczone pudełko i nie mam zainstalowanego gnomevfs-copy ani kio-client.
eskatos
Spróbuj Dave, jeśli możesz. Działa rekurencyjnie (ale niestety dla mnie nie rozumie odpowiedzi wielostanowej z serwera)
user36520
dave zrobił to z serwerem docelowym, dzięki! W rzeczywistości nie jest tak daleko od tego, co zrobiłem w oparciu o skrypt davpush, który używa samego zwłok przy użyciu interfejsu API perla HTTP :: DAV. Ale w przypadku Dave'a nie można łatwo napisać skryptu powłoki za pomocą zestawu poleceń, ponieważ jest on tylko interaktywny. Odpowiedź zaakceptowana :)
eskatos,
8

Oto szybko zhakowany skrypt powłoki, który pozwala to zrobić za pomocą zwłok :

#!/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";

Jeśli jest nazwany, davcpy.shto polecenie takie jak

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

zezwala na kopię rekurencyjną z

<local-directories>/<dirname>

w zdalny o nazwie

<some-directories>/<dirname>

Zauważ, że używa funkcji skryptowej, cadaveraby nadal zezwalać na interaktywne wpisywanie loginu / hasła. Wydaje mi się, że jest wystarczająco solidny, aby obsługiwać dziwne nazwy plików i katalogów zawierające spacje, ale nie testowałem takich przypadków.

nberth
źródło
2

Rozwiązaniem może być Rclone . Jest to jednokierunkowy program do synchronizacji wiersza poleceń, podobny do rsync, który obsługuje WebDAV (między innymi). Może rekurencyjnie kopiować katalog, pomijając pliki istniejące w miejscu docelowym. Posiada pewne opcje wiersza poleceń do kontrolowania zachowania synchronizacji, na przykład, czy chcesz usunąć pliki docelowe, jeśli znikną one ze źródła. Dostępne są pakiety dla wielu dystrybucji, ale możesz także zainstalować i uruchomić zwykły plik binarny. Za pierwszym razem musisz zdefiniować „zdalnego”:

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

Następnie możesz skopiować lub zsynchronizować pliki i katalogi:

rclone copy /home/onno/mydir my-remote:
Onnonymous
źródło
1

Modyfikacja odpowiedzi Nberth, która działa na OSX:

#!/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";

Użycie jest takie samo. Cytując odpowiedź Nbertha:

Jeśli [powyższe] ma nazwę davcpy.sh, to polecenie takie jak

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

zezwala na kopię rekurencyjną z

<local-directories>/<dirname>

w zdalny o nazwie

<some-directories>/<dirname>
JayQuerie.com
źródło
0

Jestem na Ubuntu Linux. Za pomocą bezpiecznika (System plików w przestrzeni użytkownika) i mountdavfs (davfs2) możesz zamontować podkatalog na serwerze Webdav jako folder lokalny.

Otwórz terminal i postępuj w następujący sposób:

  • Zainstaluj davfs2, jeśli jeszcze nie istnieje: sudo apt-get install davfs2

  • Połącz się z serwerem Webdav:

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

(Należy wprowadzić właściciela systemu plików, w przeciwnym razie nie będą istnieć żadne prawa zapisu)

Dodatkowo musiałem wpisać te linie w /etc/dafs2/davfs2.conf:

use_proxy       0         
use_locks       0
if_match_bug    1

Zobacz https://bugs.launchpad.net/ubuntu/+source/davfs2/+bug/466960

mount - Polecenie - Wynik (ostatni wiersz wyniku):

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)

Sprawdź także, czy jest jakiś dziwny plik ~/.davfs2/secrets- może być konieczny, aby zamontować stałe, które przetrwają ponowne uruchomienie.

Teraz możesz wydawać polecenia takie jak, cp -vr /data/myphotos /media/somedira pliki zostaną skopiowane rekurencyjnie i przesłane na stronę webdav.

knb
źródło