khác biệt đệ quy với tiền xử lý trên mỗi tệp


3

Làm thế nào để tôi có được hiệu ứng kết hợp của diff -r left_dir right_dirdiff <(cat left_file | myfilter) <(cat right_file | myfilter)không có nhiều kịch bản?

Câu trả lời:


2

Nếu tên tệp của bạn đơn giản (không có khoảng trắng, v.v.), bạn có thể sử dụng

left_dir=...
right_dir=...
find $left_dir -type f | while read left ; do
    relpath=${left#$left_dir}
    diff <(myfilter $left) <(myfilter $right_dir$relpath)
done

Nếu đây đã là "nhiều kịch bản" và vẫn còn vấn đề (khoảng trắng trong tên tệp, các tệp không tồn tại ở một bên, v.v.), có lẽ bạn đã hết may mắn.


Nên dễ dàng làm việc với khoảng trắng nếu bạn trích dẫn các biến chính xác vàfind … -print0 | while IFS= read -r -d '' …
slhck

@slhck: Chắc chắn rồi. Tôi chỉ coi đó là "quá nhiều kịch bản" ;-)
choroba

điều này thực hiện một mức đệ quy duy nhất. để làm cho đúng, người ta cần phải làm find left -type d, find right_dir -type dbỏ sự khác biệt trái và phải và áp dụng mã của bạn vào giao lộ.
bobah

@bobah: Ý bạn là gì? Nếu $left_dir/path/deeper/than/onetồn tại, relpath sẽ path/deeper/than/onevà diff sẽ so sánh tệp với $right_dir/path/deeper/than/one.
choroba

@choroba: bạn nói đúng, nhận xét của tôi đã sai lệch. đoạn mã trên sẽ không báo cáo các thư mục trống và các tệp có ở bên phải nhưng bị thiếu ở bên trái (mặc dù việc sửa đổi để làm cho nó hoạt động khá đơn giản)
bobah
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.