あるディレクトリの属性(所有権、グループ、ACL、拡張属性など)を別のディレクトリにコピーしたいが、ディレクトリの内容自体はコピーしたくない。
これは動作しません:
cp -v --attributes-only A B
cp: omitting directory `A'
注:cp
である必要はありません。
コマンドラインでかなりの試行錯誤を繰り返した結果、私は答えを見つけたと思います。しかし、それは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
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
chmod --reference=first-dir second-dir
他の人のために動作するように思われるので私は理解していませんが、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
cp -rfp from_dir to_dir
-r
-再帰的-f
-力-p
-属性を保持します:モード、所有権、タイムスタンプ