これは効果があります
find ./ -iname '*.c' -o -name '*.h' -o -name '*.l' -exec grep -irn test1 {} \;
lsと一緒に使用すると、-exec
これが無効なオプションであることを知らせます。
#ls -exec touch {} \;
ls: invalid option -- 'e'
Try 'ls --help' for more information.
この-exec
オプションは他のコマンドではなくfindでのみ使用されることは私の理解ですか?
ベストアンサー1
コマンドを理解する最善の方法は、そのマニュアルを読むinfo ls
ことinfo find
ですman ls/man find
。または、各POSIX仕様について学び、他のすべての実装に共通して適用されるサブセットを理解してください。
構文は次のとおりfind
です。
find [options] <file1> [<file2>...] [predicates]
(一部のfind
実装ではスキップを許可します<file1>
)
そしてls
:
ls [options] [<file1> [<file2>...]]
([...]
オプション部分を示します)。
標準オプションは単一文字です-
。一部の人々はその主張を受け入れ、一部の人々は受け入れません。オプションはパラメータに結合できます。たとえば、で書くことがls -l -d
できますls -ld
。
-exec
したがって、これはオプションではないことがわかります。find
これは、オプションが次のように解釈されるためです-e -x -e -c
(またはオプションが引数を受け入れる-e -x ec
場合-x
)。
一部のツールはサポートを実装しています。長いオプションがありますが、これらの競合を避ける--
ために、これらのオプションの前にはプレフィックスが付いています。-
たとえば、GNUfind
とGNUの両方がls
サポートされています。--help
オプション。
の場合はfind
POSIX-exec
呼び出しスルブ。それではないオプション。それ表現するこれはファイルのリストの後ろにあり、どのファイルが選択され、そのファイルに対して何が行われるかを決定するために使用されます。
find
一部のオプションもサポートされています(今後-L
/などのファイルリスト)は-H
グローバル動作に影響します。
ls
概念なしスルブ...でもない表現するファイルを選択するために使用されます。その行動は、以下によってのみ制御されます。オプション。ls
任意のコマンドを実行するオプションはありません。
ところで、コードにはいくつかの問題があります。
-a
(省略した場合は暗示されます)が優先され、ファイルに対してのみ実行されます-o
。バラより-exec
*.l
複数の '-name' と '-exec' を持つ 'find' は、最後に表示される '-name' のみを実行します。-r
を使用しようとしました。grep
これは、作業を完了し、ディレクトリ内のファイルを見つけるgrep
ためにいくつかの実装でサポートされている非標準オプションです。find
見つかったファイルの中に、対応するfind
ディレクトリタイプがないと有害ではないかもしれませんが、必要ではないかもしれません。- 構文を使用すると、ファイルごとに1つずつ実行
{} \;
できます。grep
これは非常に非効率的です。これはまた、grep
ファイル名が表示されないことを意味します(-r
上記で始まらない限り)。 - これは
-iname
非標準拡張です(info find
GNU拡張の場合はシステムには見つかりますが、POSIX仕様では見つかりません)。 -type
述語を使用しないため、find
通常のファイルだけでなく、すべての種類のファイルが報告されます。これには、ディレクトリ、デバイス、FIFO を含めることができます。を使用すると、-type f
検索は次のように制限されます。定期的な文書。 GNUを使用すると、シンボリックリンクの確認後に通常のファイルになるファイルを選択するfind
こともできます。-xtype f
これらの問題を解決するには、次のようにします。
find . -name '*.[cChl]' -type f -exec grep -in test1 /dev/null {} +