Jak sklonować / skopiować wszystkie atrybuty pliku / katalogu do innego pliku / katalogu?

15

Chcę skopiować atrybuty (własność, grupa, ACL, atrybuty rozszerzone itp.) Z jednego katalogu do drugiego, ale nie samą zawartość katalogu.

To nie działa:

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

Uwaga: nie musi tak być cp.

Grzegorz Wierzowiecki
źródło
1
Nie zdałeś -r, więc ignorujesz katalogi. Ale myślę, że chcesz skopiować tylko atrybuty, a nie zawartość? Mogę myśleć tylko o brzydkich hackach. Zauważ też, że installmoże zachować konteksty SELinuksa.
lynxlynxlynx
3
możliwy duplikat własności i uprawnień Clone z innego pliku?
Gilles „SO- przestań być zły”
1
@Gilles, dziękuję za wskazanie na inny temat. Rozwiązuje część problemu: własność i tryb. Co z atrybutami rozszerzonymi?
Grzegorz Wierzowiecki
1
@GrzegorzWierzowiecki Obawiam się, że bardzo niewiele narzędzi obsługuje rozszerzone atrybuty. Jeśli są ważne, skorzystaj z sugestii rsync killermist.
Gilles 'SO - przestań być zły'
Btw. Oto ładne przykłady, w których można zobaczyć xattrs w akcji: GUI Dolphin w KDE: imgur.com/oguuJNm lub URL, z którego plik został pobrany ustawiony przez przeglądarki: odnośniki: gist.github.com/gwpl/a00e18bc150f1e3518335d13c5e46ad7 + freedesktop.org/ wiki / CommonExtendedAttributes + vhanda.in/blog/2014/07/tagging-your-files
Grzegorz

Odpowiedzi:

13

Po kilku próbach i błędach w linii poleceń wydaje mi się, że znalazłem odpowiedź. Ale to nie jest cpodpowiedź związana.

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

To robi:

-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

Na przykład

    --no-OPTION             turn off an implied OPTION (e.g. --no-D)
-r, --recursive             recurse into directories
killermist
źródło
Ta ostatnia edycja jest zdecydowanie hitem. Z / bez drugiego katalogu, to w końcu robi dokładnie to, o co prosi, wygląda.
killermist
Końcowy ukośnik robi różnicę tylko w pierwszym argumencie, a nie w drugim. Jest to wyjaśnione w trzecim lub czwartym akapicie USAGEsekcji strony podręcznika rsync(1).
jw013
@ jw013 Po kilkukrotnym przeczytaniu dokumentacji rsync, kilka miesięcy temu, doszedłem do wniosku, że końcowe ukośniki były domyślnym „do”, zarówno w pierwszym (drugim, trzecim itd.), jak i ostatnim argumencie. Ale z drugiej strony często kończę moje polecenia znakiem / na ostatnim argumencie, który sugeruje / żąda efektu „do”.
killermist
Moje przeczucie, że skopiuję wszystkie atrybuty katalogu i nie będzie zwykłego pliku rsync -a -AX --include='*/' --exclude='*'. Nie testowałem
Gilles „SO- przestań być zły”
@ jw013 Dzięki za pomoc w uzyskaniu odpowiedzi. Próbowałem SO wielu opcji w moim małym środowisku testowym piaskownicy i wciąż się zbliżałem, ale niektóre z nich nie działają poprawnie.
killermist
0
chmod --reference=first-dir second-dir
Etienne Dublé
źródło
2
To nie zadziała rekurencyjnie i uważam, że nie skopiuje list ACL ani rozszerzonych atrybutów.
Mat.
1
To nie powinno być rekurencyjne: OP poprosił o „nie samą zawartość katalogu”, a zaakceptowana odpowiedź mówi rsync --no-recursive. Problem z tą odpowiedzią polega na tym, że nie wykonuje ona list ACL ani XATTR.
ShadSterling
0
cp -rfp from_dir to_dir
  • -r - rekurencyjny
  • -f - siła
  • -p - zachowaj atrybuty: tryb, własność, znaczniki czasu
burtsevyg
źródło
Potrzebuję także --attributes-only
smremde
0

Nie rozumiem, ponieważ wydaje się, że działa dla innych, ale metoda rsync zawodzi dla mnie na FreeBSD z ZFS. Nic się nie dzieje. Jednak metoda Jean-François Dockesa działa. (patrz: https://www.lesbonscomptes.com/pxattr/ ) Katalog źródłowy = A i katalog docelowy = B, z pierwotnego pytania.

pxattr -lR A > tmp.EAs

(edytuj pierwszy wiersz tmp.EAs, aby zmienić katalog A na B, s / A / B /)

pxattr -S tmp.EAs
Cira
źródło
Zatem nie polecasz tylko metody innej osoby ; polecasz czyjś program , prawda? W porządku, ale właśnie zmarnowałem pięć minut na poszukiwanie dokumentacji na temat mało znanego niestandardowego programu. Byłoby miło, gdybyś wyraźniej stwierdził, że zaleca się, aby ludzie pobierali mało znany niestandardowy program.
G-Man mówi „Reinstate Monica”
wzruszenie ramionami Jest w drzewie portów. To nie do końca czyni go niestandardowym. To nie jest tak niejasne jak pyxattri ja też tego spróbowałem. To był rodzaj twardego orzecha do zgryzienia. Podobno działa na to gnu cp, ale nie mogę tego zrobić. Rozszerzone atrybuty zasługują na coś lepszego. Ponadto pxattr działa przynajmniej pod Linuksem, OSX i BSD.
cira
0
rsync -aAX --exclude='*' src_dir/ dst_dir

gdzie dst_dir - jest katalogiem docelowym. Lub:

rsync -dADXgot src_dir dst_dir

gdzie dst_dir - to katalog zawierający katalog docelowy lub nieistniejący katalog docelowy.

Ze strony 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
Alek
źródło
-3

Potrzebujesz „-r” do skopiowania katalogu.

trzykrotnie
źródło
2
Myślę, że źle cię zrozumiałem, nie potrzebujesz zawartości, tylko xattr. Gdyby to było dla SELinuksa, możesz użyć chcon odwołując się do oryginalnego katalogu (A).
trzykrotnie
-roznacza kopiowanie wszystkich podkatalogów i plików w nich ... Nie chcę kopiować całego drzewa ... Chcę kopiować atrybuty tylko dla jednego i tylko jednego katalogu - bez wpływu na jego zawartość.
Grzegorz Wierzowiecki