رسينك:كيف يمكنني تكوين لإنشاء الدليل الهدف على الخادم ؟

StackOverflow https://stackoverflow.com/questions/1636889

  •  06-07-2019
  •  | 
  •  

سؤال

أود أن rsync من الكمبيوتر المحلي إلى ملقم.على الدليل الذي لا وجود له, أريد rsync في خلق هذا دليل على الخادم الأول.

كيف يمكن أن أفعل ذلك ؟

هل كانت مفيدة؟

المحلول

إذا كان لديك أكثر من الدليل أوراق الماضي المراد إنشاؤها، يمكنك تشغيل ssh ... mkdir -p منفصلة لأول مرة، أو استخدام خدعة --rsync-path ك <لأ href = "http://www.schwertly.com/2013/07/ وأوضح إجبار-رسينك إلى إنشاء باستخدام-بعد-مسار-رسينك مسار / "يختلط =" noreferrer "> هنا :

rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source user@remote:/tmp/x/y/z/

وأو استخدام خيار --relative كما اقترح توني. في هذه الحالة، يمكنك فقط تحديد الجذر من جهة، والتي يجب أن يكون موجودا، وليس بنية الدليل من المصدر، الذي سيتم إنشاء:

rsync -a --relative /new/x/y/z/ user@remote:/pre_existing/dir/

وبهذه الطريقة، سوف ينتهي مع / pre_existing / دير / الجديدة / س / ص / ض /

وإذا كنت تريد أن يكون "ص / ض /" خلق، ولكن ليس داخل "الجديد / س /"، يمكنك إضافة ./ حيث تريد --relativeto تبدأ:

rsync -a --relative /new/x/./y/z/ user@remote:/pre_existing/dir/

وسيخلق / pre_existing / دير / ص / ض ع /.

نصائح أخرى

على افتراض أنك تستخدم ssh للتواصل رسينك ماذا عن إرسال الأوامر ssh قبل:

ssh user@server mkdir -p existingdir/newdir

إذا كان موجودا بالفعل لا يحدث شيء

والخيار -R, --relative سوف تفعل ذلك.

وعلى سبيل المثال: إذا كنت تريد أن /var/named/chroot النسخ الاحتياطي وإنشاء بنية الدليل نفسه على الملقم البعيد ثم -R سوف تفعل ذلك تماما

وهذا العمل بالنسبة لي:

 rsync /dev/null node:existing-dir/new-dir/

وأنا لا تحصل على هذه الرسالة:

skipping non-regular file "null"

ولكن لا داعي للقلق حول وجود دليل فارغ التسكع.

وأنا لا أعتقد أنك تستطيع أن تفعل ذلك مع القيادة رسينك واحد، ولكن يمكنك 'قبل إنشاء "دليل إضافي أولا مثل هذا:

rsync --recursive emptydir/ destination/newdir

وحيث 'emptydir' هو دليل فارغ المحلي (الذي قد يكون لديك لإنشاء كدليل مؤقت أولا).

وانها قليلا من الإختراق، لكنه يعمل بالنسبة لي.

وهتافات

وكريس

وهذه الإجابة تستخدم أجزاء من إجابات أخرى، ولكن نأمل أنها سوف تكون أكثر وضوحا قليلا لالظروف. كنت أبدا المحدد ما كنت rsyncing - إدخال دليل واحد أو عدة ملفات

لذلك دعونا نفترض انك تتحرك إدخال الدليل المصدر عبر، وليس مجرد نقل الملفات الواردة فيه.

ودعونا نقول لديك دليل يسمى محليا data/myappdata/ ولديك حمولة من الدلائل تحت هذا. لقد data/ على الجهاز المستهدف ولكن لا data/myappdata/ - وهذا هو السهل بما فيه الكفاية:

rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata

ويمكنك حتى استخدام اسم مختلف عن الدليل البعيد:

rsync -rvv --recursive /path/to/data/myappdata user@host:/remote/path/to/data/newdirname

إذا كنت مجرد نقل بعض الملفات ولا تتحرك دخول الدليل الذي يحتوي لهم فإنك ستفعل:

rsync -rvv /path/to/data/myappdata/*.txt user@host:/remote/path/to/data/myappdata/

ووأنه سيتم إنشاء الدليل myappdata لك على الجهاز البعيد لوضع الملفات في مرة أخرى، يجب أن الدليل data/ موجود على الجهاز البعيد.

وبالمناسبة يا استخدام العلم -rvv هو الحصول على إخراج مطول مضاعف لذلك هو واضح حول ما تقوم به، وكذلك السلوك العودية ضرورية.

وفقط لتظهر لك ما يحصل عند استخدام رسينك (3.0.9 على أوبونتو 12.04)

$ rsync -rvv *.txt user@remote.machine:/tmp/newdir/
opening connection using: ssh -l user remote.machine rsync --server -vvre.iLsf . /tmp/newdir/
user@remote.machine's password:
sending incremental file list
created directory /tmp/newdir
delta-transmission enabled
bar.txt
foo.txt
total: matches=0  hash_hits=0  false_alarms=0 data=0

وهذا الأمل يزيل هذا الأمر قليلا.

وعلى سبيل المثال:

ومن: /xxx/a/b/c/d/e/1.html

ل: المستخدم @ بعيد: /pre_existing/dir/b/c/d/e/1.html

ورسينك:

ومؤتمر نزع السلاح / XXX / أ / && رسينك -auvR ب / ج / د / ه / المستخدم @ جهاز التحكم عن بعد: / pre_existing / دير /

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top