条件文:特定のファイルを含まないフォルダを探す

条件文:特定のファイルを含まないフォルダを探す

名前に数字が含まれており、.counts.txt で終わるファイルが含まれていないすべてのフォルダを探す必要があります。オンラインで見つけたいくつかの提案を組み合わせて、私が望むことをする次のコマンド(bash用)を思いつくことができました。

find . maxdepth 1 -type d -name "*[0-9]*" ! -exec sh -c 'ls -1 "{}" | egrep -q "*.counts.txt"' \; -print

しかし、いくつかの機能を理解していません。

  1. ここで感嘆符はどんな役割を果たしますか?どのようにして、次の条件文を否定しますか?
  2. sh直接パイプする代わりにを使用して新しいシェルを開く必要があるのはなぜですかls

ベストアンサー1

  1. はい、!次の条件を否定します。つまり、-exec sh -c 'ls -1 "{}" | egrep -q "*.counts.txt"' \;これが-exec否定条件なので、実行するコマンドが状態 0 を返すと真であることを覚えておく必要があります (状態が 0 でなければ否定条件は true です)。
  2. それ以降のパラメータは-execシェルに渡されず、直接実行されるため、利用可能なパイプの概念はありません。そこにパイプ文字を入れると、シェル(自己検索開始)がそれを使ってみんなfindの出力はegrepに送信されます。

man find参考資料のドキュメントとルックアップ!パラメータ-execを参照してください。

おすすめ記事