Grep
辨識特定文件中不包含特定字元串的子目錄
我有一個名為的目錄
dir1
,其中包含大約 800 個名為disp-001, disp-002, ... disp-800
. 我需要找到子目錄
- 要麼不包含文件
stdout
,要麼- 如果有,則該文件不包含特定的字元串
str1
。在另一個問題中回答了辨識不包含該文件的子目錄
$ find . -type d \! -exec test -e '{}/stdout' \; -print
但是,如果我嘗試在上述命令中包含 grep,它就不起作用
$ find . -type d \! -exec test -e 'grep str1 {}/stdout' \; -print
如何包含字元串搜尋以返回我感興趣的目錄?
您可以在那裡調整任何解決方案,例如
- 使用
( -exec
or-exec )
與slm或patrick的解決方案(第二個exec
僅在第一個返回false
時true
):find . -type d \( ! -exec test -f '{}/stdout' \; -o ! -exec grep -q str1 '{}/stdout' \; \) -print
甚至更短,如科斯塔斯建議的那樣:
find . -type d \! -exec grep -q 'str1' {}/stdout 2>/dev/null \; -print
- 使用帶有terdon解決方案的條件:
for d in **/ do if [[ ! -f "$d"stdout ]] then printf '%s\n' "$d" else grep -q str1 "$d"stdout || printf '%s\n' "$d" fi done
- 或者,使用
zsh
:print -rl **/*(/e_'[[ ! -f $REPLY/stdout ]] || ! grep -q str1 $REPLY/stdout'_)