Linuxボックスには、次の2つのディレクトリがあります。
ファイルの内容を変更せずに、アクセス許可のみを同期する必要があります。 rsyncを試しましたが、適切なオプションが見つかりません。アドバイスをいただけますか?
前もって感謝します。
[〜#〜]編集[〜#〜]
あなたの提案のおかげで私はこのスクリプトを持っています。サブツリーのアクセス許可を再帰的に変更します。
#!/bin/bash
cd good
find $1/* | while read DIR
do
chown --reference="$DIR" "/bad/$DIR"
chmod --reference="$DIR" "/bad/$DIR"
done
傑作ではありませんが、私にとってはうまくいきます。
あなたはこれを試すことができます。このスクリプトに必要な2つの引数の絶対パスが必要です。このcopyperms.shsource_dirtarget_dirのように実行します
スクリプトは次のとおりです。cat copyperms.sh
#!/bin/bash
srcDir="$1"
targDir="$2"
if [ -z "$srcDir" ] || [ -z "$targDir" ]; then
echo "Required argument missing."
Elif [ ! -d "$srcDir" ] || [ ! -d "$targDir" ] ; then
echo "Source and target not both directories."
exit
else
cd $srcDir
echo "Source directory: $srcDir; Target directory: $targDir"
echo "Matching permissions and ownerships .."
find . -print0 | xargs -0I {} echo {} | xargs -I {} chmod --reference "{}" "$targDir/{}"
find . -print0 | xargs -0I {} echo {} | xargs -I {} chown --reference "{}" "$targDir/{}"
# find . | while read name
# do
# chmod --reference "$name" "$targDir/$name"
# chown --reference "$name" "$targDir/$name"
# done
echo ".. done!"
fi
コメントアウトされたwhileループを使用することで、より多くの用途に適応できますが、速度は遅くなります。
$ time mperms/adp/code/adp/safe/code
Xargsの使用:
実際の0m0.107sユーザー0m0.008ssys 0m0.004s
Whileループの使用:
実際の0m0.234sユーザー0m0.012ssys 0m0.028s sys 0m0.028s