Tôi có hai thư mục có cấu trúc thư mục con tương tự, mà tôi muốn so sánh. Ví dụ:
A
├── child-1
├── child-2
├── child-3
├── child-4
├── child-5
và
B
├── child-1-some-text
├── child-2-more-text
├── child-3-nothing
├── child-6-random-text
├── child-7-more-random-text
Tôi muốn liệt kê tất cả các thư mục con từ Ađó là tiền tố cho thư mục con trong Bvà liệt kê cả các thư mục con tương ứng B. Sản lượng dự kiến là
child-1 -- child-1-some-text
child-2 -- child-2-more-text
child-3 -- child-3-nothing
Yêu cầu phụ: Nếu có nhiều kết quả trùng khớp B, thì nó sẽ đưa ra lỗi / cảnh báo.
Giải pháp của tôi :
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
Vấn đề:
Đối với các giá trị $fđó, không có thư mục con tương ứng B, việc xây dựng mảng sẽ gây ra lỗi cho tôi. ví dụ:
ls: không thể truy cập 'child-4 *': Không có tệp hoặc thư mục như vậy
Câu hỏi
- Làm thế nào để thoát khỏi những lỗi này?
- Có cách nào tốt hơn để đạt được (các) mục tiêu sau đó là mục tiêu trong mã của tôi không?
Cảm ơn trước!
diff -rq DIR1 DIR2để so sánh không chỉ cấu trúc thư mục, mà cả nội dung tệp.