特定のグループのファイルをchmodする必要があります。私は次のような構造を思いついた。
find . -group groupname -exec sh -c 'su -c "chmod -R u+w,g-w,o-w,g+r,o+r ." - groupname {}' \;
これは機能しますが、ファイル名に括弧(または)が含まれていると失敗します。
どんなアイデアがありますか?
答え1
補間の使用方法はファイル名を引用しないため、説明した方法で失敗する{}
ランニングに少し似ています。chmod u=rw some(filename).txt
{}
1つの解決策は、引用符付き文字列を自分find
で正しく処理できるように移動することです。
chmod
もう1つの問題は、コマンドを内部部分su
と外部部分に分割するようです。 (sh
で置き換えてこれを実証しますecho
。)結果として、コマンドが破損し、達成しようとしている目標が何であるかを完全に確信できません。
次のことを試してみてください(echo
必要な作業が行われていると確信している場合は削除してください)。
su -c "
find . -group groupname -exec echo chmod -R u+w,go+r,go-w {} \;
"
chmod
グループがあるすべてのディレクトリに本当に再帰を適用しますかgroupname
?たぶん、-type d
述語セットを考慮する必要があります。
答え2
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