फ़ाइलों की प्रतिलिपि बनाने के बजाय पैच फ़ाइल बनाने के लिए rsync प्राप्त करें?


19

मैं बहुत सारी फाइलों को कॉपी कर रहा हूं जो rsync का उपयोग करके एक सर्वर से दूसरे में बदल गई हैं। मुझे पता है कि मैं -nसूखे रन करने के लिए विकल्प का उपयोग कर सकता हूं , इसलिए मैं देख सकता हूं कि क्या फाइलें बदल दी गई हैं। हालाँकि क्या यह संभव है कि परिवर्तित की गई फ़ाइल सामग्री का एक प्रिंट करने के लिए rsync प्राप्त करें? मैं यह देखना चाहता हूं कि कॉपी करने से पहले क्या हो रहा है? कुछ मैं एक फ़ाइल और बाद में अंतर (1) के साथ लागू करने के लिए बचा सकता हूं?

जवाबों:


8

एक बेहतर तरीका हो सकता है, लेकिन यह कुशलता से काम कर सकता है:

 rsync -vrn / dest:/ > ~/file_list

फिर आँकड़ों को हटाने के लिए परीक्षण संपादित करें, फिर:

while read file; do
    diff $file <(ssh dest "cat $file")
done < ~/edited_file_list

एक अन्य विकल्प:
आप फ़ाइल सिस्टम को sshfs / fuse जैसी किसी चीज़ के साथ माउंट करने पर विचार कर सकते हैं, और फिर बस अंतर का उपयोग कर सकते हैं।


नोट: मैंने उन आदेशों का परीक्षण नहीं किया ;-)
काइल ब्रांट

अच्छी शुरुआत, लेकिन rsync से अतिरिक्त आउटपुट का भार है, जैसे आँकड़े, और "वृद्धिशील फ़ाइल सूची भेजना", आदि
Rory

आप --out-format = "% f"
Kyle Brandt

यदि आप आउट-प्रारूप का उपयोग करते हैं, तो v छोड़ दें, और grep -v 'स्किपिंग नॉन-रेगुलर फ़ाइल' ... ... जो इसे बहुत साफ होना चाहिए
काइल ब्रांट

बस जाँच करें कि क्या संयोग से rsync --diffदो साल बाद एक नई / बेहतर विधि है ...
अंगूठी



1

यह मूल रूप से संभव नहीं है क्योंकि rsync केवल फ़ाइलों के बीच द्विआधारी अंतर के बारे में परवाह करता है।

आप rsync के आउटपुट का उपयोग करके इसे स्क्रिप्ट करने में सक्षम हो सकते हैं। लेकिन यह हैकिंग होगा।

मुझे विश्वास है कि यह मूल रूप से यूनिसन के साथ संभव है ।


1
क्या मेरा मतलब है कि आप hackish से क्या मतलब है? :-)
काइल ब्रांट

बिलकुल, काइल: D
Dan Carley

1

सिर्फ डिफरेंशियल जेनरेट करने के लिए डिफरेंट (टेक्स्ट फाइल्स के लिए) या xdelta (बाइनरी फाइल्स के लिए) जैसे कुछ का इस्तेमाल क्यों नहीं किया जाता? आपको विशेष रूप से rsync से कुछ प्राप्त करने की आवश्यकता क्यों है?


मुझे rsync की आवश्यकता नहीं है, लेकिन इसे
Rory

ओह नो एसश!
Womble

1

काइल के जवाब पर विस्तार करने के लिए, यह प्रक्रिया को स्वचालित करता है। ध्यान दें कि यह पूरी तरह से अप्रयुक्त है, शायद बहुत नाजुक है, और आपके कंप्यूटर को हटा सकता है और आपके कुत्ते को मार सकता है।

#!/bin/bash

REMOTE=${1?Missing Remote Path}
LOCAL=${2?Missing Local Path}

# Trim trailing slash since we'll be adding it as a separator later
REMOTE=${REMOTE%/}
LOCAL=${LOCAL%/}

#Break it down
RHOST=${REMOTE%:*}
RPATH=${REMOTE#*:}

while read FILE; do
    diff -u ${LOCAL}/${FILE} <(ssh $RHOST "cat ${RPATH}/${FILE}")
done < <(rsync -vrn $REMOTE/ $LOCAL/ | sed '1d;/^$/q')

0

Rsync एल्गोरिथ्म फ़ाइल के बाइनरी चंक्स की तुलना करके काम करता है। इस तरह के बाइनरी अंतर को प्रिंट करने योग्य नहीं माना जाता है। वहाँ एक कमांड है जिसे rdiff कहा जाता है जो एक द्विआधारी अंतर उत्पन्न करने के लिए rsync एल्गोरिथ्म का उपयोग करता है, लेकिन मुझे नहीं लगता कि आप जो वर्णन करते हैं उसके लिए यह उपयोगी होगा, यह आमतौर पर वृद्धिशील बैकअप को लागू करने के लिए उपयोग किया जाता है।

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