একই কন্টেন্ট সহ একটি ডিরেক্টরিতে সমস্ত ফোল্ডার সন্ধান করুন


10

উবুন্টুতে, কোনও ডিরেক্টরিতে (যেমন, একই বিষয়বস্তুযুক্ত ফোল্ডারগুলি) সদৃশ ফোল্ডারগুলির সন্ধান করার মতো কোনও কি আছে? আমি মনে করি ইতিমধ্যে ডুপ্লিকেট ফাইল (যেমন fdupes) সন্ধানের জন্য কিছু কমান্ড-লাইন সরঞ্জাম উপলব্ধ রয়েছে, তবে আমি তার পরিবর্তে সদৃশ ফোল্ডারগুলি সন্ধান করতে চাই। এটি হ'ল যে ফোল্ডারগুলিতে সেগুলি থাকা ফাইলগুলির বিষয়বস্তুর সাথে মিল রয়েছে (যদিও ফাইলের নাম এবং অন্যান্য মেটাডেটা পৃথক হতে পারে)।


আমি কোনও ডিরেক্টরিতে (দৈর্ঘ্য অনুসারে বাছাই করা) সমস্ত ফোল্ডারের একটি তালিকা তৈরি করে শুরু করতে পারি এবং তারপরে একই দৈর্ঘ্যের সাথে প্রতিটি জোড়া ফোল্ডার পরীক্ষা করতে পারি।
অ্যান্ডারসন গ্রিন

"সদৃশ" সংজ্ঞায়িত করুন। ভিতরে থাকা ফাইলগুলি কি কেবল ফাইল সামগ্রীর সাথে মিলবে? ফাইলের নাম? ইনোড নম্বর? ফাইলের আকার?
ক্রিস ডাউন

@ ক্রিসডাউন প্রশ্নটি আপডেট করা হয়েছে।
অ্যান্ডারসন গ্রিন

3
হ্যাঁ. ডিরেক্টরিগুলি প্রকৃতপক্ষে কেবল ফাইল হয় তাই আপনার বক্তব্যটি অস্পষ্ট। বাস্তবে "একই বিষয়বস্তু" থাকার অর্থ হ'ল ডিরেক্টরিগুলির উভয়টিতে একই ইনড রেফারেন্স রয়েছে। আপনি এটি বোঝাতে চাইছিলেন কিনা তা স্পষ্ট নয়, বা আপনার অভ্যন্তরের ফাইলগুলির মধ্যে একই বিষয়বস্তু থাকা উচিত কিনা এবং যদি তা থাকে তবে অন্যান্য বিধিগুলি রয়েছে (এমটাইম, ফাইলের নাম ইত্যাদি)।
ক্রিস ডাউন

3
@ ক্রিসডাউন আমার অর্থ এই যে ভিতরে থাকা ফাইলগুলিতে একই বিষয়বস্তু থাকা উচিত।
অ্যান্ডারসন গ্রিন

উত্তর:


5
#!/bin/bash
shopt -s dotglob

for file in "$1"/*; do [[ -f "$file" ]] && d1+=( "$(md5sum < "$file")" ); done
for file in "$2"/*; do [[ -f "$file" ]] && d2+=( "$(md5sum < "$file")" ); done 

[[ "$(sort <<< "${d1[*]}")" == "$(sort <<< "${d2[*]}")" ]] && echo "Same" || echo "Different"

আপনি এটি এখানে কর্মে দেখতে পাবেন:

$ mkdir 1 2
$ ./comparedirs 1 2
Same
$ cat > 1/1 <<< foo
$ cat > 2/1 <<< foo
$ ./comparedirs 1 2
Same
$ cat > 2/1 <<< bar
$ ./comparedirs 1 2
Different

যেহেতু এই স্ক্রিপ্টটি অনির্ধারিত, তাই এটি যেভাবে কাজ করার কথা সেভাবে এটি কাজ করে কিনা তা দেখতে আমি আগ্রহী।
অ্যান্ডারসন গ্রিন

1
@ অ্যান্ডারসগ্রিন আপডেট হওয়া উত্তরটি পরীক্ষা করে দেখুন, পরীক্ষা করেছেন।
ক্রিস ডাউন

নিস! একাধিক ফাইল এবং পৃথক মেটাডেটা (== "একই") দেখানোর জন্য cat > 1/2 <<< barএবং সেখানে একটি পরীক্ষাও করা উচিতcat > 2/3 <<< bar
nealmcb

@ ক্রিসডাউন: শেষ ধাপে বাছাই করা দরকার?
Harish.venkat

মার্জিত স্ক্রিপ্ট, কেবল গৌণ বাগটি হ'ল উভয় ডিরেক্টরি উপস্থিত না থাকলেই সে একই ফেরত দেয়। সহজে নির্ধার্য হওয়া উচিত যদি এক ভাল স্ক্রিপ্টিং মধ্যে আই চেয়ে
কোসাইন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.