Grep

辨識特定文件中不包含特定字元串的子目錄

  • September 23, 2015

我有一個名為的目錄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 )slmpatrick的解決方案(第二個exec僅在第一個返回false-print執行,僅在其中一個返回時執行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'_)

引用自:https://unix.stackexchange.com/questions/231622