मेरे पास समान सबफ़ोल्डर संरचनाओं के साथ दो फ़ोल्डर हैं, जिनकी मैं तुलना करना चाहूंगा। उदाहरण के लिए:
A
├── child-1
├── child-2
├── child-3
├── child-4
├── child-5
तथा
B
├── child-1-some-text
├── child-2-more-text
├── child-3-nothing
├── child-6-random-text
├── child-7-more-random-text
मैं उन सभी सबफ़ोल्डर्स को सूचीबद्ध करना चाहूंगा, A
जिसमें से एक सबफ़ोल्डर के लिए उपसर्ग हैं B
और B
साथ ही संबंधित सबफ़ोल्डर्स को भी सूचीबद्ध कर सकते हैं । अपेक्षित आउटपुट है
child-1 -- child-1-some-text
child-2 -- child-2-more-text
child-3 -- child-3-nothing
एक द्वितीयक आवश्यकता: यदि कई में मेल खाता है B
, तो उसे एक त्रुटि / चेतावनी देनी चाहिए।
मेरा समाधान :
cd A
for f in `ls -d */`;
do
cd B;
new_dirs=(`ls -1d $f*`);
cd -;
if [ ${#new_dirs[@]} -eq 0 ]
then
## DO_Nothing
continue;
elif [ ${#new_dirs[@]} -gt 1 ]
then
echo "Multiple matches to $f";
continue;
else
echo "Unique Match found to $f -- ${new_dirs[0]}";
continue;
fi;
done
मुसीबत:
उन मानों के लिए $f
, जिनमें कोई संबंधित सबफ़ोल्डर नहीं है B
, सरणी निर्माण मुझे एक त्रुटि दे रहा है। उदाहरण के लिए:
ls: 'child-4 *' तक नहीं पहुंच सकता: ऐसी कोई फ़ाइल या निर्देशिका नहीं
सवाल
- इन त्रुटियों से कैसे छुटकारा पाएं?
- क्या लक्ष्य प्राप्त करने का बेहतर तरीका है, फिर मेरे कोड में?
अग्रिम में धन्यवाद!
diff -rq DIR1 DIR2
न केवल निर्देशिका संरचना, बल्कि फ़ाइल सामग्री की तुलना करने के लिए उपयोग कर सकते हैं।