ファイル許可をコピーしますが、Unixのファイルはコピーしません


14

(から:https : //stackoverflow.com/questions/15245144/copy-file-permissions-but-not-files、トピック外のためクローズ)

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

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

version1/
version2/

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

シェルコマンドまたはスクリプトを介してこれを行う自動化された方法はありますか?


ここでは、使用できるのperlで有用スクリプトがあり serverfault.com/questions/373058/...
NoNoNo

回答:



14

私のバージョンにcp--attributes-onlyフラグがありませんので、これを仕上げました。単純なフォルダーYMMVで簡単にテストされました。

$> ls
version1/
version2/
$> ls -l version1/1/a
-rw-rw-r-- 1 alex alex 0 Feb  5 12:49 version1/1/a
$> ls -l version2/1/a
-rwxrwxrwx 1 alex alex 0 Feb  5 12:49 version1/1/a

$> find version1 -type f -printf '%P\n' | xargs -I {} \
    chmod --reference=version1/{} version2/{}

$> ls -l version2/1/a
-rw-rw-r-- 1 alex alex 0 Feb  5 12:49 version1/1/a

5

あなたはできますが、私は「自動化された方法」ではないと思います!

GNU chownおよびGNU chmodには、--reference=RFILE使用できるパラメーターがあります。

chown --reference=RFILE yourfile
chmod --reference=RFILE yourfile

これは、使用しRFILEた設定(パーミッション、所有者、グループ、等。)及びコピー彼らがするがyourfile

マニュアルで詳細を説明しています。


0

私の場合、「find」と「vi」を指定した「stat」コマンドを使用して、パーミッションを適用するスクリプトを作成することで解決しました。

cd version1/
find . -exec stat -c '%a %n' "{}" \; > setPerm.sh
vi setPerm.sh

「vi」にすべての行に「chmod」コマンドを挿入しました。ディレクトリ%s/^/chmod /g 内のスクリプトをコピーしてversion2/実行しました。

他の解決策は有効に思えますが、万が一に備えてテストしていません。


0

Mariano Panigaの答えに触発されて、viを使用してコマンドを検索/置換する必要のない、より良いものがあると思います。所有権情報(uid / gid)もコピーしたいです。

cd version1/
find . -exec stat -c 'chmod %a %n; chown %U:%G %n' "{}" \; > /tmp/setPerm.sh
chmod u+x /tmp/setPerm.sh
cd ../version2
/tmp/setPerm.sh

stat -c '...'必要に応じて、内部のコマンドをカスタマイズできます。使用可能なすべてのオプションについては、を参照してくださいman stat


スクリプトは、改行が埋め込まれた名前を処理しますか?
鹿ハンター

@ deer-hunterそのままで動作しますが、そうでない場合は、ファイル名部分の前後に引用符「..」を追加できます。
友文
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.