実際に ACL を使用しない場合でも、ACL ツールを使用するのが最も簡単な方法です。 getfacl -R . >saved-permissions
を呼び出すだけです ディレクトリツリーと setfacl --restore=saved-permissions
のパーミッションをバックアップする それらを復元します。
それ以外の場合、権限をバックアップする方法は find -printf
です . (GNU find が必要ですが、それは Linux にあるものです。)
find -depth -printf '%m:%u:%g:%p\0' >saved-permissions
null 文字で区切られたレコードを含むファイルを取得します。各レコードには、1 つのファイルの数値権限、ユーザー名、グループ名、およびファイル名が含まれています。復元するには、レコードをループして chmod
を呼び出します と chown
. -depth
find
へのオプション 一部のディレクトリを書き込み不可にしたい場合に使用します (最初にその内容を処理する必要があります)。
Daniel Alder によって提供されたスニペットから派生したこの bash スニペットを使用して、アクセス許可を復元できます。
while IFS=: read -r -d '' mod user group file; do
chown -- "$user:$group" "$file"
chmod "$mod" "$file"
done <saved-permissions
次の awk スクリプトを使用して、find
を有効にすることができます。 シェル コードに出力して、アクセス許可を復元します。
find -depth -printf '%m:%u:%g:%p\0' |
awk -v RS='\0' -F: '
BEGIN {
print "#!/bin/sh";
print "set -e";
q = "\047";
}
{
gsub(q, q q "\\" q);
f = $0;
sub(/^[^:]*:[^:]*:[^:]*:/, "", f);
print "chown --", q $2 ":" $3 q, q f q;
print "chmod", $1, q f q;
}' > restore-permissions.sh
最初に ACL パッケージをインストールします:
sudo apt-get install acl
再帰的に保存 ファイルへのアクセス許可と所有権:
getfacl -R yourDirectory > permissions.acl
復元 (現在のパスに相対):
setfacl --restore=permissions.acl