%20%E8%A9%95%E4%BE%A1.png)
文字列セットの1つを含むすべてのファイルを検索しています。もしそうなら、アクセス権を変更します。
find . -type f -exec grep -q '#!/bin/bash\|#!/usr/bin/grep\|#!/usr/bin/awk' {} \; -exec chmod 700 {} ;\
grep -q
findがその文字列を含むファイルを見つけたときにどのように機能するのか疑問に思います。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偽です。