उन फ़ाइलों को कैसे प्रिंट करें जिन्हें rsync का उपयोग करके बदला गया है?


32

वहाँ rsync पाने के लिए एक तरीका है कि सभी फाइल को पूर्ण फाइलपेट्स को प्रिंट करें जो वास्तव में किसी भी फाइल को स्थानांतरित किए बिना अलग हैं?

वैकल्पिक रूप से, मुझे केवल आकार या अंतिम-संशोधित समय में परिवर्तन के आधार पर दो पेड़ों (SSH से अधिक) में फ़ाइलों को अलग करने का एक तरीका चाहिए।

जवाबों:


33

Rsync में एक dry-runविकल्प है:

-n, --dry-run               show what would have been transferred

मुझे यकीन नहीं है कि यह वही है जो आप चाहते हैं।

यदि आप diffदो पेड़ों की फ़ाइलों को चाहते हैं, तो आप शायद दो दिशाओं को खोज और पाइप के साथ खोज कर सकते हैं। तब आप diffफ़ाइलों की तुलना करने के लिए उपयोग कर सकते हैं।


3
+1, यह rsync के लिए बनाया गया है। के उत्पादन का विस्तार --dry-runआपके उपयोग पर निर्भर करेगा -vऔर --progress options- इसलिए यदि आपको कोई आउटपुट नहीं मिलता है, तो जांच लें कि ये विकल्प आवश्यकतानुसार सेट हैं। मैंने देखा है कि यह निर्देशिका नाम तब भी भेजेगा जब फाइलें बदल नहीं गई हैं, लेकिन आप आउटपुट को इसके माध्यम से sedया इसी तरह से फ़िल्टर कर सकते हैं ।
डेविड स्पिल्ट

4
लेकिन --dry- रन फ़ाइलों को दिखाने के लिए लगता है भले ही वे समान हैं।
क्वांटम 7

14

मैं विवरण देखने के लिए इसका उपयोग करना पसंद करता हूं, इसे कम करने के लिए पाइपिंग:

rsync -azh --dry-run --delete-after --out-format="[%t]:%o:%f:Last Modified %M" source destination | less

7

rsync -rvn localdir targetdir

-N का मतलब केवल क्रिया दिखाना है (बिना किसी क्रिया के)।

ध्यान दें कि आपको 'v' की आवश्यकता है या यह आपको कुछ भी नहीं दिखाएगा! (बाकी जवाब ये भूल जाते हैं ...)


2
अनुयायियों के लिए -n "--dry-run" :)
rogerdpack

1

अन्य उत्तरों और /server//a/618740/114520 पर बिल्डिंग

  • उपयोग --dry-run(या -n) संशोधन से बचने के लिए
  • उपयोग --itemize-changes(या -i) परिवर्तन खोजने के लिए
  • सभी उपनिर्देशिकाएँ प्राप्त करने के लिए उपयोग --archive(या -a)
  • egrepडॉट द्वारा शुरू की गई प्रविष्टियों को फ़िल्टर करने के लिए उपयोग करें (कोई परिवर्तन नहीं)

जो आपको देता है: rsync -nia source destination | egrep -v "sending incremental file list" | egrep -v "^\."

यदि आप बस एक ही रास्ता चाहते हैं, तो आप कमांड बदल सकते हैं:

  • स्रोत से गंतव्य तक परिवर्तन के लिए: rsync -nia source destination | egrep -v "sending incremental file list" | egrep -v "^(\.|<)"
  • गंतव्य से स्रोत में परिवर्तन के लिए: rsync -nia source destination | egrep -v "sending incremental file list" | egrep -v "^(\.|>)"

और अगर आपको केवल फाइलों की आवश्यकता है, तो बस awkजादू जोड़ें :rsync -nia source destination | egrep -v "sending incremental file list" | egrep -v "^\." | awk '{print $2}'


0

मैं कुछ इस तरह के लिए जाना जाएगा:

#! /bin/bash 

set -eu   ## Stop on errors and on undefined variables

## The local directory name
LOCAL_DIR=$1
## The remote directory in rsync sintax. Example: "machine:directory"
REMOTE_DIR=$2

shift 
shift 
# Now the first two args are gone and any other remaining arguments, if any, 
# can be expanded with $* or $@

# Create temporary file in THIS directory (hopefully in the same disk as $1:
# we need to hard link, which can only made in the same partition)
tmpd="$(mktemp -d  "$PWD/XXXXXXX.tmp" )"

# Upon exit, remove temporary directory, both on error and on success
trap 'rm -rf "$tmpd"' EXIT

# Make a *hard-linked* copy of our repository. It uses very little space 
# and is very quick 
cp -al "$LOCAL_DIR" "$tmpd"

# Copy the files. The final «"$@"» allows us to pass on arguments for rsync 
# from the command line (after the two directories).
rsync -a "$REMOTE_DIR"/   "$tmpd/"  --size-only "$@"

# Compare both trees
meld "$LOCAL_DIR"  "$tmpd"

उदाहरण के लिए:

$ cd svn 
$ rsyncmeld myproject othermachine:myproject -v --exclude '*.svn' --exclude build

0

इस मामले की सच्चाई यह है कि यदि आप चलाते हैं rsync -v ...और यह स्क्रीन पर फ़ाइल नाम को आउटपुट करता है, तो उस फ़ाइल को स्थानांतरित किया जा रहा है (या स्थानांतरित किया गया होता, यदि आप एक ddry-run कर रहे हैं)। यह पता लगाने के लिए कि rsync इसे स्थानांतरित करने के लिए क्यों था, आइटमाइज़ मोड का उपयोग करें: /server//a/618740/27813

जैसा कि अन्य ने नोट किया है, डिफ़ॉल्ट rsync द्वारा केवल फ़ाइल आकार और टाइमस्टैम्प के आधार पर तुलना की जाती है, जो दोनों को एक और मेल करना होता है, उस फाइल पर "डेल्टा कॉपी" शुरू हो जाती है। यदि आप वास्तव में देखना चाहते हैं कि कौन सी फाइलें अलग हैं, तो "-c" चेकसम मोड का उपयोग करें।

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