グループを含むchmodファイル - (あるファイルにエラーがあります。

グループを含むchmodファイル - (あるファイルにエラーがあります。

特定のグループのファイルを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

関連情報