Я хочу скопіювати атрибути (власність, група, ACL, розширені атрибути тощо) одного каталогу в інший, але не сам вміст каталогу.
Це не працює:
cp -v --attributes-only A B
cp: omitting directory `A'
Примітка: цього не повинно бути cp.
Я хочу скопіювати атрибути (власність, група, 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
USAGEрозділу rsync(1)довідкової сторінки.
rsync -a -AX --include='*/' --exclude='*'. Я не тестував.
chmod --reference=first-dir second-dir
--no-recursive. Проблема з цією відповіддю полягає в тому, що він не робить ACL або XATTR.
Я не розумію, тому що це, здається, працює для інших, але метод rsync не працює для мене на FreeBSD із ZFS. Нічого не відбувається. Однак метод Жана-Франсуа Докеса працює. (див .: https://www.lesbonscomptes.com/pxattr/ ) Каталог джерел = Каталог та каталог призначення = B, з початкового питання.
pxattr -lR A > tmp.EAs
(відредагуйте перший рядок tmp.EAs, щоб змінити каталог A на B, s / A / B /)
pxattr -S tmp.EAs
pyxattrя це намагався. Це був якийсь твердий горіх для розтріскування. Нібито gnu cp працює для цього, але я не можу змусити його піти. Розширені атрибути заслуговують кращого за це. Також pxattr працює принаймні під linux, osx та bsd.
rsync -aAX --exclude='*' src_dir/ dst_dir
де dst_dir - це цільовий dir. Або:
rsync -dADXgot src_dir dst_dir
де dst_dir - це dir, що містить цільовий dir, або неіснуючий цільовий dir.
З сторінки man 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
Вам потрібно "-r" для копіювання каталогу.
-rМає на увазі копію всіх підкаталогів та файлів у них ... Я не хочу копіювати ціле дерево ... Я хочу скопіювати атрибути лише для однієї та лише однієї каталогу - не впливаючи на її вміст.
-r, тому це ігнорування каталогів. Але я думаю, ви хочете скопіювати лише атрибути, а не вміст? Я можу придумати лише потворних хаків. Також зауважте, щоinstallможна зберігати контексти SELinux.