Find
帶有組的 chmod 文件 - 帶有 (
我需要 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
您使用
{}
插值的方式使文件名不被引用,所以它有點像 runningchmod u=rw some(filename).txt
,它會按照您描述的方式失敗。一種解決方案是將
{}
帶引號的字元串移出,以便find
可以自己正確處理它。另一個問題是您似乎正在拆分
chmod
命令,其中一部分在內部su
,一部分在外部。(通過替換為 來證明這一點sh
。echo
)結果是命令損壞,我不完全確定您要實現的目標。試試這個(
echo
當你確定它正在做你想做的事情時刪除):su -c " find . -group groupname -exec echo chmod -R u+w,go+r,go-w {} \; "
您真的打算對
chmod
碰巧有 group 的每個目錄應用遞歸groupname
嗎?也許您應該考慮-type d
在謂詞集中。