कैसे कमांड लाइन से HTTPS के माध्यम से एक WebDAV सर्वर पर एक निर्देशिका अपलोड करने के लिए?


12

मैं एक सरल स्थिति का सामना कर रहा हूं, मुझे अपलोड करना है, जैसा कि, HTTPS पर उपलब्ध होने वाले WebDAV सर्वर पर फ़ाइलों का एक बड़ा पेड़ है । मुझे केवल कमांड लाइन के साथ एक लिनक्स बॉक्स से अपलोड शुरू करना चाहिए। मैं बॉक्स पर प्रोग्राम इंस्टॉल कर सकता हूं।

मैंने कैडेवर की कोशिश की है, लेकिन यह पुनरावर्ती निर्देशिका अपलोड का समर्थन नहीं करता है।

क्या आप इसे प्राप्त करने के लिए सरल उपकरण / स्क्रिप्ट के बारे में जानते हैं?


ठीक है, मुझे कुछ ऐसा मिला जो उसने किया।

मैंने उस davpush.plस्क्रिप्ट से शुरू किया जो यहां https://github.com/ptillemans/davpush पर देखी जा सकती है

कुछ बदलाव आवश्यक थे:

  • सभी " dav://" को " https://" बदलें
  • " print POUT "open";" पहले " जोड़ें print POUT $script;"

धिक्कार है, केवल एक निर्देशिका को अपलोड करने के लिए एक पर्ल स्क्रिप्ट हैक करने के लिए जो असभ्य है। मैं अभी भी सरल टूल / स्क्रिप्ट की तलाश में हूं।

जवाबों:


2

कोशिश करें gnomevfs-copy:

संपादित करें: gvfs-copy पुनरावर्ती नहीं है। मैंने इसे पैच किया लेकिन अभी तक कोड प्रकाशित करने के लिए हवी। इस बीच, perldav से चेक डेव । यह पुनरावर्ती स्थानान्तरण करता है।

यदि आपके पास फ़्यूज़ अक्षम नहीं है, तो आप davfs2 आज़मा सकते हैं

यदि आप अपने स्वयं के उपकरण को कोड करने के लिए प्रतिकूल नहीं हैं, तो आप gvfs का उपयोग कर सकते हैं और gvfs-copy के स्रोत कोड से प्रेरणा प्राप्त कर सकते हैं

मेरे पास एक समान मुद्दा है, इसलिए मैं बेहतर समाधान के साथ वापस आ सकता हूं


kio- क्लाइंट भी कर सकता था। दुर्भाग्य से यह काफी प्रतिबंधित बॉक्स है और मेरे पास gnomevfs-copy नहीं है और न ही kio-client स्थापित है।
एस्काटोस

यदि आप कर सकते हैं तो कोशिश करो। यह पुनरावर्ती रूप से काम करता है (लेकिन दुर्भाग्य से मेरे लिए, यह सर्वर से मल्टीस्टैटस प्रतिक्रिया को नहीं समझता है)
user36520

यह लक्ष्य सर्वर के साथ किया, धन्यवाद! वास्तव में यह अभी तक मैंने davpush स्क्रिप्ट के आधार पर नहीं किया है जो perl HTTP का उपयोग करके cadaver का उपयोग करता है :: EAV API। लेकिन डव के साथ, कोई भी आसानी से कमांड के एक समूह के साथ एक शेल स्क्रिप्ट नहीं लिख सकता है क्योंकि यह केवल इंटरैक्टिव है। उत्तर स्वीकार किए जाते हैं :)
eskatos

8

यहाँ एक जल्दी से काट दिया खोल स्क्रिप्ट है कि परमिट था का उपयोग कर रहा है शव :

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

उपयोग समान है। उत्तर के उत्तर से उद्धरण:

यदि [ऊपर] का नाम davcpy.sh है तो एक कमांड जैसा

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

से एक पुनरावर्ती प्रतिलिपि की अनुमति देता है

<local-directories>/<dirname>

एक रिमोट में जिसका नाम है

<some-directories>/<dirname>

0

मैं उबंटू लिनक्स पर हूं। फ़्यूज़ की मदद से, (यूज़रस्पेस में फाइलसिस्टम), और माउंटवैफ़्स (डावफ़्स 2), आप स्थानीय फ़ोल्डर के रूप में वेब सर्वर पर एक उपनिर्देशिका माउंट कर सकते हैं।

अपना टर्मिनल खोलें और निम्नानुसार आगे बढ़ें:

  • यदि यह पहले से मौजूद नहीं है तो 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और फ़ाइलों को पुनरावर्ती रूप से कॉपी किया जाएगा, और वेबदाव साइट पर अपलोड किया जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.