Find

帶有組的 chmod 文件 - 帶有 (

  • February 15, 2017

我需要 chmod 某個組中的文件。我想出了這個結構:

find . -group groupname -exec sh -c 'su -c "chmod -R u+w,g-w,o-w,g+r,o+r ." - groupname {}' \;

這有效,但當文件名中有括號(或)時失敗。

有任何想法嗎?

您必須將IFS變數設置為$(echo -en "\n\b"),例如:

#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
find . -group groupname -exec sh -c 'su -c "chmod -R u+w,g-w,o-w,g+r,o+r ." - groupname {}' \;
IFS=$SAVEIFS

您使用{}插值的方式使文件名不被引用,所以它有點像 running chmod u=rw some(filename).txt,它會按照您描述的方式失敗。

一種解決方案是將{}帶引號的字元串移出,以便find可以自己正確處理它。

另一個問題是您似乎正在拆分chmod命令,其中一部分在內部su,一部分在外部。(通過替換為 來證明這一點shecho)結果是命令損壞,我不完全確定您要實現的目標。

試試這個(echo當你確定它正在做你想做的事情時刪除):

su -c "
   find . -group groupname -exec echo chmod -R u+w,go+r,go-w {} \;
"

您真的打算對chmod碰巧有 group 的每個目錄應用遞歸groupname嗎?也許您應該考慮-type d在謂詞集中。

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