Як рекурсивно завантажувати каталог на сервер WebDAV через HTTPS з командного рядка?


12

Я стикаюся з досить простою ситуацією, мені потрібно завантажити, як є, велике дерево файлів на сервер WebDAV, який доступний через HTTPS. Я повинен розпочати завантаження з вікна Linux тільки з командного рядка. Я можу встановити програми на коробку.

Я спробував Cadaver, але він не підтримує рекурсивне завантаження каталогу.

Чи знаєте ви прості інструменти / сценарії для цього?


Гаразд, я знайшов щось, що зробив це.

Я почав із davpush.plсценарію, який можна знайти тут https://github.com/ptillemans/davpush

Були потрібні деякі зміни:

  • замінити всі " dav://" на " https://"
  • додати " print POUT "open";" до " print POUT $script;"

Чорт забирає, щоб зламати сценарій perl, щоб просто завантажити грубі каталоги. Я все ще шукаю прості інструменти / сценарії.

Відповіді:


2

Спробуйте gnomevfs-copy:

Редагувати: gvfs-copy не є рекурсивним. Я зафіксував це, але все-таки хаві опублікувати код. Тим часом перевіряйте Дейва з перлдав. Це робить рекурсивні передачі.

Якщо у вас відключений запобіжник, ви можете спробувати davfs2

Якщо вам не загрожує кодування власного інструменту, ви можете використовувати gvfs та отримати натхнення з вихідного коду gvfs-copy

У мене є подібне питання, тому я можу повернутися з кращим рішенням


kio-клієнт міг це зробити і. На жаль, це досить обмежене вікно, і у мене не встановлено ні gnomevfs-copy, ні kio-client.
ескатос

Спробуйте Дейв, якщо зможете. Працює рекурсивно (але, на жаль, він не розуміє відповіді мультистатусу від сервера)
user36520

Дейв зробив це з цільовим сервером, дякую! Насправді це не так далеко від того, що я зробив на основі сценарію davpush, який використовує сам кадавер за допомогою API perl HTTP :: DAV. Але з Дейвом, не можна легко написати скрипт оболонки з купою команд, оскільки він лише інтерактивний. Відповідь прийнято :)
eskatos

8

Ось швидко зламаний скрипт оболонки, який дозволяє робити tha за допомогою кадавера :

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

Якщо він названий, davcpy.shто така команда, як

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

дозволяє рекурсивну копію з

<local-directories>/<dirname>

у віддалений ім

<some-directories>/<dirname>

Зауважте, що він використовує сценарій сценарію, cadaverщоб все-таки дозволити інтерактивне введення входу / паролів. Я думаю, що це також достатньо надійно для обробки дивних імен файлів та каталогів, що містять пробіли, але я не перевіряв жодного подібного випадку.


2

Рішенням може бути Rclone . Це одностороння програма синхронізації командного рядка, подібна до rsync, яка підтримує WebDAV (серед інших). Він може рекурсивно копіювати каталог, пропускаючи файли, які існують у пункті призначення. У ньому є кілька параметрів командного рядка для контролю поведінки синхронізації, наприклад, чи потрібно видаляти цільові файли, якщо вони відійшли від джерела. Існують пакети для багатьох дистрибутивів, але ви також можете встановити та запустити звичайний бінарний файл. Перший раз вам потрібно буде визначити "віддалений":

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

Після цього ви можете скопіювати або синхронізувати файли та файли:

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

1

Модифікація відповіді nberth, яка працює на 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";

Використання те саме. Цитуючи відповідь nberth:

Якщо [вище] названо davcpy.sh, то така команда, як

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

дозволяє рекурсивну копію з

<local-directories>/<dirname>

у віддалений ім

<some-directories>/<dirname>

0

Я на Ubuntu Linux. За допомогою запобіжника (Filesystem у користувальницькому просторі) та mountdavfs (davfs2) ви можете змонтувати підкаталог на сервері Webdav як локальну папку.

Відкрийте свій термінал і виконайте наступні дії:

  • Встановіть davfs2, якщо він ще не існує: sudo apt-get install davfs2

  • Підключення до сервера Webdav:

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

(Власника файлової системи потрібно ввести, інакше прав на запис немає)

Крім того, мені довелося вводити ці рядки в /etc/dafs2/davfs2.conf:

use_proxy       0         
use_locks       0
if_match_bug    1

Дивіться https://bugs.launchpad.net/ubuntu/+source/davfs2/+bug/466960

mount - Команда - Результат (Останній рядок виводу):

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)

Також перевірте, чи є дивний файл ~/.davfs2/secrets- це може знадобитися для постійних версій, які пережили перезавантаження.

Тепер ви можете видавати такі команди, як cp -vr /data/myphotos /media/somedirфайли будуть рекурсивно копіюватися та завантажуватися на сайт webdav.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.