ฉันมีสองโฟลเดอร์ที่มีโครงสร้างโฟลเดอร์ย่อยที่คล้ายกันซึ่งฉันต้องการเปรียบเทียบ ตัวอย่างเช่น:
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เพื่อเปรียบเทียบไม่เพียง แต่โครงสร้างไดเรกทอรี แต่เนื้อหาไฟล์