web-dev-qa-db-ja.com

ファイルのアクセス許可をコピーしますが、ファイルはコピーしません

同じディレクトリツリーのコピーが2つあります。両方にほぼ同じファイルがあります(1つのバージョンには、余分なファイルや不足しているファイルがいくつかある場合があります)。ただし、ほとんどのファイルは両方のディレクトリに共通です(同じ相対パスとすべてを持っています)。

これらがディレクトリにあると仮定します。

version1/
version2/

問題は、version1 /の許可が台無しになったため、version2 /から許可をコピーしたいのですが、version1 /の新しいファイルを置き換えずにコピーしたいことです。

これをbash経由で自動化する方法はありますか? (bashである必要はなく、他のメソッド/プログラミング言語でも可能です)。

34
user788171

chmod--referenceオプションを確認する必要があります。

chmod --reference version2/somefile version1/somefile

findxargsを適切な方法で適用すると、うまくいくはずです。

 ~/version2$ find . -type f | xargs -I {} chmod --reference {} ../version1/{}

これは再帰的にも機能し、ターゲットディレクトリに存在しないファイルに対して堅牢です(No such file ...エラーは無視できます)。もちろん、ターゲットディレクトリにのみ存在するファイルには何もしません。

乾杯、

68

このスクリプトを使用できます(ファイル/ディレクトリごとに個別にアクセス許可を変更します)

#!/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を使用してスクリプトを実行します

10
uba

あなたが試すことができます:

chmod owner-group-other ./dir or ./file

アクセス許可がきめ細かく、ファイルごとに異なる場合を除き、ディレクトリで再帰的なchmodを実行し、アクセス許可を統合できます。

役立つ可能性のあるオプションのリファレンスについては、man chmodを参照してください

0
swappy