デフォルトでは、Androidの/ dataフォルダをバックアップする2つのtarファイルがあります。問題は、最新のバックアップに含まれているファイルの権限と所有権が混乱していることです。しかし、以前のバージョンのtarの権限は完璧でした。
old.tarの権限を読み、変更を最新の.tarにコピーする方法が欲しいです。
-p および --same-owner フラグを使用して自分のシステムにファイルを抽出しようとしましたが、私のコンピュータには system というユーザーやグループはありませんが、私の Android 携帯にはあるため、所有権が代わりroot
に変更されました.system
私はファイルを抽出し、statとgrepを使用して権限と所有権を読み、最新の.tarでファイルの権限と所有権を設定するスクリプトを書く必要があると思いました。しかし、それは本当ではないようです。誰でもこの問題を助けることができますか?
答え1
Tarがそうできるかどうかは分かりません。ただし、両方のバックアップの圧縮を異なるディレクトリに解凍し、次のものを使用できる必要があります。
cd /mnt/oldbackup ;
find ./ -exec getfacl {} | setfacl /mnt/newbackup/{}
マンページによると、の出力をgetfacl
標準入力として使用できます。setfacl
答え2
新しいメタデータをtarアーカイブに入れる方法はありませんが、tarアーカイブからファイルシステムにメタデータを抽出する方法はあります。ただ電話してください:
star -xp -meta < archive.tar
これにより、新しいファイルを作成したりファイルの内容を上書きしたりすることなく、アーカイブのメタデータをローカルファイルシステムのファイルに復元できます。 「アーカイブのファイルがファイルシステムのファイルより最新でない場合でも」-U(アスタリスクのマニュアルページを参照)が必要になる可能性が高いです。
答え3
デフォルトの回答は機能しなくなりました(find -execは構文を変更し、setfaclには復元=引数が必要です)、findを使用する必要はありません。
あなたがしなければならないこと:
cd /mnt/oldbackup
getfacl -R . >/tmp/permissions
cd /mnt/newbackup
setfacl --restore=/tmp/permissions