Shell

評估查找 ( -exec )

  • May 2, 2016

我正在搜尋包含一組字元串之一的所有文件。如果他們這樣做,我會更改他們的訪問權限。

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

我很好奇 find 當它找到包含該字元串的文件時它是如何工作的,grep -q所以0另一個 exec 執行但不應該執行。第二個exec查找所有文件並更改所有文件的權限。為什麼它起作用並且只更改那些包含該字元串的文件?

我不確定你的意圖是什麼(你沒有說清楚),但如果是 chmod 到 700 匹配模式的所有文件,那麼,除了你的錯字(;\而不是\;),你的命令似乎工作故意的。

然而:

當它找到包含該字元串的文件時,grep -q0會執行另一個 exec 但不應該執行。

是的,它應該這樣做。0 表示成功表示為真,因此find繼續評估其表達式,第二次-exec執行。1(或 0 以外的任何值)將意味著失敗將意味著錯誤,因此find會短路其評估(並列表達式之間存在隱含的邏輯與),因此第二個-exec不會執行。

為什麼它有效

檢查 GNU 的聯機幫助頁find

expr1 expr2

連續的兩個表達式被認為是用隱含的“and”連接的;如果expr1為假,則不計算expr2 。

引用自:https://unix.stackexchange.com/questions/280547