Đây là một câu hỏi dựa trên câu trả lời của Rich Homolka , nhưng hoạt động trên cây thư mục:
find . -type f -exec grep -l addDesignControlChangeNotification {} \; |
while IFS= read -r file; do
grep -q removeDesignControlChangeNotification "$file" > /dev/null ;
[ $? -ne 0 ] && echo $file;
done
Bất kỳ tập tin trả lại sẽ chứa addDesignControlChangeNotificationnhưng không removeDesignControlChangeNotification.
GIẢI TRÌNH:
find . -type f -exec grep -l foo {} \;: Điều này sẽ in tất cả các tệp trong bất kỳ thư mục con nào của thư mục hiện tại có chứa chuỗi foo. Các -llá cờ gây grep để chỉ in tên của tập tin phù hợp.
while read file: điều này lặp lại qua từng tệp được tìm thấy ở trên, lưu tên của nó trong biến $file.
grep -q bar "$file" > /dev/null: comand này loks cho chuỗi bartrong mỗi tệp có chứa foo.
[ $? -ne 0 ] && echo $file;: Nếu giá trị trả về ( $?) của greplệnh là 0 (nghĩa là nếu chuỗi không có trong tệp), hãy in tên của tệp.