検索:条件付きの複数の「-exec」

検索:条件付きの複数の「-exec」

説明したように、WindowsがLinuxドライバに変換するプロセスの一環として、単語を含むstdint.hファイルに標準Cパッケージを含めたいと思います。LARGE_INTEGERここデータ型の場合。 findとxargsの前のスレッドについて知っています。ここそしてここ

GNU検索部分のコードは、主に以下に基づいています。ワイヤー:

gfind /tmp/ -type f                                                      \
    \( -name "*.h" -o -name "*.cpp" \)                                   \
    -exec ggrep -Pl "LARGE_INTEGER" {} +

擬似コード拡張子も含めたいです。また、ファイルに次の単語を含める必要があります。LARGE_INTEGER

gfind /tmp/ -type f                                                \
    \( -name "*.h" -o -name "*.cpp" \)                             \
    -and -exec ggrep -Pl "LARGE_INTEGER" {} \;                     \
    | xargs gsed -i '1s/^/#include <stdint.h>\n/'

よく分からないから-and与えるところ

gsed: can't read /tmp/: No such file or directory
...

私はcommandlinefuの例に従いました。ここ

新しいコマンドをGNU SEDベースの検索にどのように結合しますか?

ベストアンサー1

私は 次の2つの操作findに1を使用します。-exec

探す。 -タイプ f -exec grep -qFSOME_STRING{}\; -sed実行注文する'{}\;

2 番目のコマンドは、最初のコマンドが次のように評価される場合にのみ実行されます。本物つまり終了コード 0したがって、sed問題のファイルは、ファイルに次のものが含まれている場合にのみ処理されます。SOME_STRING。動作方法を簡単に確認できます。

探す。 -タイプ f -exec grep -qFSOME_STRING{}\; -印刷

以下を含むファイルのみをリストする必要があります。SOME_STRING。もちろん、常に2つ以上の式を連結し!(否定)などの演算子を使用することもできます。たとえば、次のようになります。

探す。 -タイプ f -exec grep -qFこれ{}\; -exec grep -qFそれ{}\; -印刷

以下を含むファイルのみがリストされます。これしかし含まれていませんそれ
とにかくあなたの場合は次のようになります。

gfind /tmp/ -type f \( -name "*.h" -o -name "*.cpp" \) \
-exec ggrep -qF LARGE_INTEGER {} \; \
-exec gsed -i '1s/^/#include <stdint.h>\n/' {} \;

1
私はあなたがサポートしたり選択しxargsたりしないと仮定します。その場合は、次の構成を使用します。-0--null

探す。 -タイプ f -exec grep -lFZSOME_STRING{}+| xargs -0 gsed -s -i'注文する'

つまり、あなたの場合:

gfind /tmp/ -type f \( -name "*.h" -o -name "*.cpp" \) \
-exec ggrep -lFZ LARGE_INTEGER {} + | \
xargs -0 gsed -s -i '1s/^/#include <stdint.h>\n/'

最初のものよりも効率的でなければなりません。
また、どちらもすべての種類のファイル名で動作します。より高速なのでgrep(固定文字列)を使用しているので、-F正規表現を使用する予定の場合は削除してください。

おすすめ記事