प्रोग्रामिक रूप से सबसे अच्छा समाधान जो मैं आ सकता था, की एक सूची बनाने के लिए rsync , सॉर्ट और साइज़ का उपयोग कर रहा हूँ :
(rsync -rcn --out-format="%n" old/ new/ && rsync -rcn --out-format="%n" new/ old/) | sort | uniq
मुझे इस उदाहरण के साथ समझाएं: हम दो डाकुविकी रिलीज की तुलना यह देखना चाहते हैं कि कौन सी फाइलें बदली गई थीं और कौन से नए बनाए गए थे।
हम टार्स को wget के साथ लाते हैं और उन्हें निर्देशिकाओं में निकालते हैं old/
और new/
:
wget http://download.dokuwiki.org/src/dokuwiki/dokuwiki-2014-09-29d.tgz
wget http://download.dokuwiki.org/src/dokuwiki/dokuwiki-2014-09-29.tgz
mkdir old && tar xzf dokuwiki-2014-09-29.tgz -C old --strip-components=1
mkdir new && tar xzf dokuwiki-2014-09-29d.tgz -C new --strip-components=1
Rsync चलाने से एक तरह से rsync और अलग-अलग शो की तुलना के रूप में नई बनाई गई फ़ाइलें याद आ सकती हैं:
rsync -rcn --out-format="%n" old/ new/
निम्नलिखित उत्पादन प्राप्त करता है:
VERSION
doku.php
conf/mime.conf
inc/auth.php
inc/lang/no/lang.php
lib/plugins/acl/remote.php
lib/plugins/authplain/auth.php
lib/plugins/usermanager/admin.php
केवल एक दिशा में rsync चलाने से नई बनाई गई फ़ाइलों की याद आती है और दूसरा रास्ता हटाई गई फ़ाइलों को मिस करने के लिए, अंतर के आउटपुट की तुलना करें:
diff -qr old/ new/
निम्नलिखित उत्पादन प्राप्त करता है:
Files old/VERSION and new/VERSION differ
Files old/conf/mime.conf and new/conf/mime.conf differ
Only in new/data/pages: playground
Files old/doku.php and new/doku.php differ
Files old/inc/auth.php and new/inc/auth.php differ
Files old/inc/lang/no/lang.php and new/inc/lang/no/lang.php differ
Files old/lib/plugins/acl/remote.php and new/lib/plugins/acl/remote.php differ
Files old/lib/plugins/authplain/auth.php and new/lib/plugins/authplain/auth.php differ
Files old/lib/plugins/usermanager/admin.php and new/lib/plugins/usermanager/admin.php differ
दोनों तरीके से rsync चलाने और डुप्लिकेट को निकालने के लिए आउटपुट को छाँटने से पता चलता है कि निर्देशिका data/pages/playground/
और फ़ाइल data/pages/playground/playground.txt
शुरू में छूट गई थीं:
(rsync -rcn --out-format="%n" old/ new/ && rsync -rcn --out-format="%n" new/ old/) | sort | uniq
निम्नलिखित उत्पादन प्राप्त करता है:
VERSION
conf/mime.conf
data/pages/playground/
data/pages/playground/playground.txt
doku.php
inc/auth.php
inc/lang/no/lang.php
lib/plugins/acl/remote.php
lib/plugins/authplain/auth.php
lib/plugins/usermanager/admin.php
rsync
शोध तर्क के साथ चलाया जाता है:
-r
"निर्देशिकाओं में फिर से आना",
-c
समान आकार की फ़ाइलों की तुलना करने के लिए और केवल "चेकसम के आधार पर स्किप करें, न कि मॉड-टाइम और आकार",
-n
"कोई परिवर्तन नहीं किए गए के साथ एक परीक्षण चलाने के लिए", और
--out-format="%n"
"निर्दिष्ट FORMAT का उपयोग करके आउटपुट अपडेट", जो केवल फ़ाइल नाम के लिए "% n" है
rsync
दोनों दिशाओं के आउटपुट (फाइलों की सूची) को संयुक्त और क्रमबद्ध रूप से उपयोग किया जाता है sort
, और फिर इस तरह की सूची को दो डुप्लिकेट को हटाकर संघनित किया जाता हैuniq