同じディレクトリツリーのコピーが2つあります。両方にほぼ同じファイルがあります(1つのバージョンには、余分なファイルや不足しているファイルがいくつかある場合があります)。ただし、ほとんどのファイルは両方のディレクトリに共通です(同じ相対パスとすべてを持っています)。
これらがディレクトリにあると仮定します。
version1/
version2/
問題は、version1 /の許可が台無しになったため、version2 /から許可をコピーしたいのですが、version1 /の新しいファイルを置き換えずにコピーしたいことです。
これをbash経由で自動化する方法はありますか? (bashである必要はなく、他のメソッド/プログラミング言語でも可能です)。
chmod
の--reference
オプションを確認する必要があります。
chmod --reference version2/somefile version1/somefile
find
とxargs
を適切な方法で適用すると、うまくいくはずです。
~/version2$ find . -type f | xargs -I {} chmod --reference {} ../version1/{}
これは再帰的にも機能し、ターゲットディレクトリに存在しないファイルに対して堅牢です(No such file ...エラーは無視できます)。もちろん、ターゲットディレクトリにのみ存在するファイルには何もしません。
乾杯、
このスクリプトを使用できます(ファイル/ディレクトリごとに個別にアクセス許可を変更します)
#!/bin/sh
chmod --reference $1 $2
if [ -d $1 ]
then
if [ "x`ls $1`" != "x" ]
then
for f in `ls $1`
do
$0 $1/$f $2/$f
done
fi
fi
引数version2 version1を使用してスクリプトを実行します
あなたが試すことができます:
chmod owner-group-other ./dir or ./file
アクセス許可がきめ細かく、ファイルごとに異なる場合を除き、ディレクトリで再帰的なchmodを実行し、アクセス許可を統合できます。
役立つ可能性のあるオプションのリファレンスについては、man chmodを参照してください