web-dev-qa-db-ja.com

すべてのファイル/ディレクトリ属性を別のファイル/ディレクトリに複製/コピーする方法は?

あるディレクトリの属性(所有権、グループ、ACL、拡張属性など)を別のディレクトリにコピーしたいが、ディレクトリの内容自体はコピーしたくない。

これは動作しません:

cp -v --attributes-only A B
cp: omitting directory `A'           

注:cpである必要はありません。

16

コマンドラインでかなりの試行錯誤を繰り返した結果、私は答えを見つけたと思います。しかし、それはcp関連の答えではありません。

rsync -ptgo -A -X -d --no-recursive --exclude=* first-dir/ second-dir

これは:

-p, --perms                 preserve permissions
-t, --times                 preserve modification times
-o, --owner                 preserve owner (super-user only)
-g, --group                 preserve group
-d, --dirs                  transfer directories without recursing
-A, --acls                  preserve ACLs (implies --perms)
-X, --xattrs                preserve extended attributes
    --no-recursive          disables recursion

参考のため

    --no-OPTION             turn off an implied OPTION (e.g. --no-D)
-r, --recursive             recurse into directories
13
killermist
rsync -aAX --exclude='*' src_dir/ dst_dir

ここで、dst_dir-ターゲットディレクトリです。または:

rsync -dADXgot src_dir dst_dir

ここで、dst_dir-ターゲットディレクトリを含むディレクトリ、または存在しないターゲットディレクトリです。

Rsyncのmanページから:

    -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
        --exclude=PATTERN       exclude files matching PATTERN

    -d, --dirs                  transfer directories without recursing
    -p, --perms                 preserve permissions
    -A, --acls                  preserve ACLs (implies -p)
    -X, --xattrs                preserve extended attributes
    -o, --owner                 preserve owner (super-user only)
    -g, --group                 preserve group
        --devices               preserve device files (super-user only)
        --specials              preserve special files
    -D                          same as --devices --specials
    -t, --times                 preserve modification times
1
Alek
chmod --reference=first-dir second-dir
0
Etienne Dublé

他の人のために動作するように思われるので私は理解していませんが、rsyncメソッドはZFSを備えたFreeBSDで私のために失敗します。何も起こりません。ただし、Jean-FrançoisDockesの方法は機能します。 (参照: https://www.lesbonscomptes.com/pxattr/ )元の質問からのソースディレクトリ= Aおよび宛先ディレクトリ=B。

pxattr -lR A > tmp.EAs

(tmp.EAの最初の行を編集して、AディレクトリーをBに変更します(s/A/B /))

pxattr -S tmp.EAs
0
cira
cp -rfp from_dir to_dir
  • -r-再帰的
  • -f-力
  • -p-属性を保持します:モード、所有権、タイムスタンプ
0
burtsevyg