find(-exec) 評価

find(-exec) 評価

文字列セットの1つを含むすべてのファイルを検索しています。もしそうなら、アクセス権を変更します。

 find . -type f -exec grep -q '#!/bin/bash\|#!/usr/bin/grep\|#!/usr/bin/awk' {} \; -exec chmod 700 {} ;\

grep -qfindがその文字列を含むファイルを見つけたときにどのように機能するのか疑問に思います。0したがって、他のexecが実行されますが、実行してはいけません。その秒はexecすべてのファイルを見つけ、すべてのファイルの権限を変更します。なぜ動作し、その文字列を含むファイルのみを変更するのですか?

ベストアンサー1

私はあなたの意図が何であるかよくわかりませんが(明確にはわかりませんでした)、パターンに一致するすべてのファイルを700にchmodしたい場合は、スペルミスを除いて(;\そうではありません\;)コマンドを意図的に次のように動作するようです。

しかし:

その文字列を含むファイルを見つけると、実行される別のexecがgrep -q表示さ0れますが、実行しないでください。

はい、そうする必要があります。 0 は成功を意味するため、式のfind評価が継続され、2 番目の式が-exec実行されます。 1(または0以外の値)は、失敗がfalseを意味するため、評価がfind短絡され(並列式間に暗黙の論理ANDがある)、2番目の評価が-exec実行されないことを意味します。

なぜ働くか。

GNUのマンページを確認してくださいfind

式1 式2

1行の2つの式は、暗黙の「and」で連結されていると見なされます。式2次の場合は評価されません。式1偽です。

おすすめ記事