コマンドラインからHTTPS経由でディレクトリをWebDAVサーバーに再帰的にアップロードする方法


12

私はかなり単純な状況に直面しています。ファイルの大きなツリーをそのままHTTPS経由で到達可能なWebDAVサーバーにアップロードする必要があります。コマンドラインのみでLinuxボックスからアップロードを開始する必要があります。ボックスにプログラムをインストールできます。

Cadaverを試しましたが、再帰的なディレクトリアップロードはサポートしていません。

それを達成するための簡単なツール/スクリプトを知っていますか?


わかりました、それを行う何かを見つけました。

私はdavpush.plここで見つけることができるスクリプトから始めましたhttps://github.com/ptillemans/davpush

いくつかの変更が必要でした:

  • すべての「dav://」を「https://」に置き換え
  • print POUT "open";」の前に「print POUT $script;」を追加

くそー、失礼なディレクトリをアップロードするだけのperlスクリプトをハックする必要があります。まだ簡単なツールやスクリプトを探しています。

回答:


2

試してくださいgnomevfs-copy

編集:gvfs-copyは再帰的ではありません。私はそれにパッチを当てましたが、それでもコードを公開するのは大変です。一方、チェックデイブを perldavから。再帰的な転送を行います。

ヒューズを無効にしていない場合は、davfs2を試すことができます

独自のツールのコーディングに悪影響を及ぼさない場合は、gvfsを使用して、gvfs-copyのソースコードからインスピレーションを得ることができます。

同様の問題が発生しているため、より良い解決策が見つかるかもしれません


キオクライアントもそれをすることができたでしょう。残念ながら、これはかなり制限されたボックスであり、gnomevfs-copyもkio-clientもインストールしていません。
エスカトス2013

できればデイブを試してみてください。再帰的に機能します(ただし、残念ながら、サーバーからのマルチ
ステータス

デイブはターゲットサーバーでそれをやった、ありがとう!実際、perl HTTP :: DAV APIを使用して死体自体を使用するdavpushスクリプトに基づいて行ったこととそれほど変わらない。しかし、daveを使用すると、対話型であるため、一連のコマンドを含むシェルスクリプトを簡単に作成できません。回答が承認されました:)
エスカトス

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

OSXで機能するnberthの回答の変更:

#!/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を使用しています。fuse、Filespace in Userspace、および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サイトにアップロードされます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.