Як клонувати / копіювати всі атрибути файлу / каталогу на інший файл / каталог?


15

Я хочу скопіювати атрибути (власність, група, ACL, розширені атрибути тощо) одного каталогу в інший, але не сам вміст каталогу.

Це не працює:

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

Примітка: цього не повинно бути cp.


1
Ви не пройшли -r, тому це ігнорування каталогів. Але я думаю, ви хочете скопіювати лише атрибути, а не вміст? Я можу придумати лише потворних хаків. Також зауважте, що installможна зберігати контексти SELinux.
lynxlynxlynx


1
@Gilles, дякую за вказівку на іншу тему. Він вирішує частину проблеми: право власності та режим. Що з розширеними атрибутами?
Grzegorz Wierzowiecki

1
@GrzegorzWierzowiecki Боюся, що дуже мало інструментів підтримують розширені атрибути. Якщо вони важливі, використовуйте пропозицію rsync кірміста.
Жил 'ТАК - перестань бути злим'

Btw. Ось приємні приклади, коли можна побачити xattrs у дії: GUI Dolphin у KDE: imgur.com/oguuJNm або URL-адресу, звідки завантажено файл, встановлений браузерами: посилання: gist.github.com/gwpl/a00e18bc150f1e3518335d13c5e46ad7 + freedesktop.org/ wiki / CommonExtendedAttributes + vhanda.in/blog/2014/07/tagging-your-files
Grzegorz Wierzowiecki

Відповіді:


13

Після трохи спроб та помилок у командному рядку, я думаю, що знайшов відповідь. Але це не 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)довідкової сторінки.
jw013

@ jw013 Месячні місяці тому, читаючи документацію rsync неодноразово, я зробив висновок про те, що кінцеві косої риси - це "мається на увазі", будь то в першому (другому, третьому тощо) чи останньому аргументі. Але знову ж таки, я часто закінчую свої команди останнім аргументом, щоб надати / вимагати афект "в".
вбивця

Моє відчуття копіювати всі атрибути каталогів, і жодного звичайного файлу не було б rsync -a -AX --include='*/' --exclude='*'. Я не тестував.
Жил "ТАК - перестань бути злим"

@ jw013 Дякую за те, що допомогли отримати цю відповідь. Я спробував так багато варіантів мого маленького тестового середовища, і продовжував наближатися, але з деякою частиною цього не працював правильно.
вбивця

0
chmod --reference=first-dir second-dir

2
Це не працюватиме рекурсивно, і я вважаю, що він не буде копіювати ACL або розширені атрибути.
Мат

1
Це не повинно бути рекурсивним: ОП запитувало "не сам вміст каталогів", а прийнята відповідь повідомляє rsync --no-recursive. Проблема з цією відповіддю полягає в тому, що він не робить ACL або XATTR.
ShadSterling

0
cp -rfp from_dir to_dir
  • -r - рекурсивний
  • -f - сила
  • -p - збереження атрибутів: режим, право власності, часові позначки

Також потрібно - тільки
розподіли

0

Я не розумію, тому що це, здається, працює для інших, але метод 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

Отже, ви не просто рекомендуєте чужий метод; ти рекомендуєш чужу програму , правда? Це нормально, але я лише витратив п’ять хвилин на пошуки документації на маловідому нестандартну програму. Було б добре, якби ви більш чітко заявили, що рекомендуєте людям завантажити маловідому нестандартну програму.
G-Man каже: "Відновіть Моніку"

знизати плечима Це в дереві портів. Це не зовсім робить його нестандартним. Це не настільки незрозуміло, як pyxattrя це намагався. Це був якийсь твердий горіх для розтріскування. Нібито gnu cp працює для цього, але я не можу змусити його піти. Розширені атрибути заслуговують кращого за це. Також pxattr працює принаймні під linux, osx та bsd.
cira

0
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

-3

Вам потрібно "-r" для копіювання каталогу.


2
Я думаю, що я вас зрозумів неправильно, вам не потрібен вміст, лише xattr. Якщо це було для SELinux, ви можете використовувати chcon із посиланням на вихідний каталог (A).
трипледи

-rМає на увазі копію всіх підкаталогів та файлів у них ... Я не хочу копіювати ціле дерево ... Я хочу скопіювати атрибути лише для однієї та лише однієї каталогу - не впливаючи на її вміст.
Grzegorz Wierzowiecki
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.