Đâ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 addDesignControlChangeNotification
như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 -l
lá 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 bar
trong mỗi tệp có chứa foo
.
[ $? -ne 0 ] && echo $file;
: Nếu giá trị trả về ( $?
) của grep
lệ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.