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 B
và 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.