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

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

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

これはうまくいきません:

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

メモ:必ずしもそうではありませんcp

答え1

コマンドラインで数多くの試行錯誤の末に答えを見つけたようです。しかし、これは適切な答えではありません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

答え2

chmod --reference=first-dir second-dir

答え3

rsync -aAX --exclude='*' src_dir/ dst_dir

ここで、dst_dir - 宛先ディレクトリです。または:

rsync -dADXgot src_dir dst_dir

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

rsyncのマニュアルページから:

    -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

答え4

他の人にとってはうまくいくようで、わかりませんが、ZFSを使用するFreeBSDではrsyncメソッドが失敗します。何もしません。しかし、Jean-François Douxのアプローチは効果的です。 (望むより:https://www.lesbonscomptes.com/pxattr/)ソースディレクトリ= A&ターゲットディレクトリ= B、元の質問から。

pxattr -lR A > tmp.EAs

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

pxattr -S tmp.EAs

関連情報