ফাইল এবং তাদের বৈশিষ্ট্যগুলির তুলনা করা


2

আমি আমার মেইলে প্রতিদিন একটি নির্দিষ্ট সেট ফাইলের তথ্য পাই যা এ জাতীয় দেখায়:

58623208 Sep 14 20:08 blbn_blfbe_drv
57904920 Sep 14 19:54 blbn_cycmn
55814208 Sep 14 06:02 clsa_Upd
38912000 Sep 14 19:12 cs_chgpp
41107456 Sep 14 19:17 csmRFbe
39403520 Sep 14 19:09 csmUAddAct
39235584 Sep 14 19:20 csmUAddSub

... এবং আরও প্রায় 60 টি ফাইলের জন্য।

এখন, এই ফাইলগুলি একের পর এক বিদ্যমান ফাইলের সাথে তুলনা করা দরকার যাতে নিশ্চিত হয়ে যায় যে সমস্ত ফাইল মিলছে কিনা।

filename, timestamp, date, এবং sizeজিনিষ মিলে থাকার অধিকার রয়েছে।

এটি স্বয়ংক্রিয় করার কোনও উপায় আছে?

আমি হয় commবা না ব্যবহার সম্পর্কে চিন্তা ছিল diff

উত্তর:


2

আমি ধরে নিই যে -dবিকল্পটির সাথে আপনার জিএনইউ তারিখ রয়েছে :

while read size mon day time filename; do
    if [[ ! -f "$filename" ]]; then
        echo "ERROR: no such file: $filename" >&2
    else
        filesize=$(stat -c %s "$filename")
        if [[ "$size" != "$filesize" ]]; then
            echo "ERROR: size mismatch: $filename" >&2
        else
            filetime=$(date -d "$(stat -c %y "$filename")" "+%b %d %H:%M")
            if [[ "$mon $day $time" != "$filetime" ]]; then
                echo "ERROR: date mismatch: $filename" >&2
            fi
        fi
    fi
done 

1

ধরে নিই যে সমস্ত নতুন ফাইলগুলি নতুন (বা সরানো যেতে পারে) নতুন / এবং সমস্ত পুরানো ফাইলগুলি পুরানো / ডিরেক্টরিতে রয়েছে, আপনি ডিরেক্টরিগুলির মধ্যে ফাইলগুলির পার্থক্য দেখতে 'ডিফ -আর ওল্ড / নতুন /' ব্যবহার করতে পারেন।

আপনি পার্থক্য, শুধুমাত্র প্রকৃতি সম্পর্কে যত্ন না যদি সত্য যে কিছু ফাইল ভিন্ন তারপর, grep ব্যবহার আউটপুট ফিল্টার করতে - কিন্তু আপনি পরিবর্তন থেকে প্রস্থান কোড হারাবেন (1 = পার্থক্য পাওয়া যায়)। পরিবর্তে আপনি গ্রেপ থেকে প্রস্থান কোডটি ব্যবহার করতে পারেন (1 = কোনও রেজিএক্সপ্যাকের মিল পাওয়া যায় নি, যার অর্থ আপনি ব্যাখ্যা করতে পারেন যে সমস্ত ফাইল একই রকম)।

উদাহরণস্বরূপ, আমি পুরানো এবং নতুন কিছু পাঠ্য ফাইল তৈরি করেছি (কেবলমাত্র জঞ্জাল / / বিন, / এসবিন এবং / ইত্যাদি ডিরেক্টরি তালিকা)। তারপরে আমি নতুন / বাজ সম্পাদনা করেছি এবং কিছু লাইন মুছে ফেলেছি:

$ ls -l new old
new:
total 28
-rw-r--r-- 1 cas cas 11063 Sep 15 15:27 baz
-rw-r--r-- 1 cas cas 14529 Sep 15 15:25 foo

old:
total 20
-rw-r--r-- 1 cas cas  6843 Sep 15 15:24 bar
-rw-r--r-- 1 cas cas 12025 Sep 15 15:24 baz

প্রথমে দুটি ডায়ারের তুলনা করুন:

$ diff -ur old new | egrep '^(Only|diff)'
Only in old: bar
diff -ur old/baz new/baz
Only in new: foo
$ echo $?
0

এসসিআর এবং ডিএসটি ডায়ারগুলি একই হলে (বা ঠিক একই বিষয়বস্তু রয়েছে) এখানে আপনি প্রস্থান কোডটি দেখতে পাবেন

$ diff -ur old old | egrep '^(Only|diff)'
$ echo $?
1

আপনি সিএমপিও ব্যবহার করতে পারেন তবে এটি কেবল পৃথক ফাইলের সাথেই মেলে, এটি পৃথক পৃথক পৃথক দুটি ডিরেক্টরি পরীক্ষা করতে পারে না। এর চারপাশে লুপ র‍্যাপারের জন্য আপনাকে একটি লিখতে হবে এবং আপনাকে অ্যাকাউন্টগুলিতে নিতে হবে যা কেবলমাত্র নতুন কিন্তু পুরানো নয় exist ডিফ ব্যবহার করতে সহজ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.