名前に数字が含まれており、.counts.txt で終わるファイルが含まれていないすべてのフォルダを探す必要があります。オンラインで見つけたいくつかの提案を組み合わせて、私が望むことをする次のコマンド(bash用)を思いつくことができました。
find . maxdepth 1 -type d -name "*[0-9]*" ! -exec sh -c 'ls -1 "{}" | egrep -q "*.counts.txt"' \; -print
しかし、いくつかの機能を理解していません。
- ここで感嘆符はどんな役割を果たしますか?どのようにして、次の条件文を否定しますか?
sh
直接パイプする代わりにを使用して新しいシェルを開く必要があるのはなぜですかls
?
ベストアンサー1
- はい、
!
次の条件を否定します。つまり、-exec sh -c 'ls -1 "{}" | egrep -q "*.counts.txt"' \;
これが-exec
否定条件なので、実行するコマンドが状態 0 を返すと真であることを覚えておく必要があります (状態が 0 でなければ否定条件は true です)。 - それ以降のパラメータは
-exec
シェルに渡されず、直接実行されるため、利用可能なパイプの概念はありません。そこにパイプ文字を入れると、シェル(自己検索開始)がそれを使ってみんなfindの出力はegrepに送信されます。
man find
参考資料のドキュメントとルックアップ!
パラメータ-exec
を参照してください。