Tüm dosya / dizin özniteliklerini farklı dosya / dizine klonlama / kopyalama


15

Bir dizinin özniteliklerini (sahiplik, grup, ACL, genişletilmiş öznitelikler vb.) Diğerine kopyalamak istiyorum, ancak dizin içeriğinin kendisini değil.

Bu çalışmıyor:

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

Not: Olması gerekmez cp.


1
Geçmediniz -r, bu yüzden dizinleri görmezden geliyor. Ama sanırım içeriği değil sadece nitelikleri kopyalamak istiyorsunuz? Sadece çirkin hack'leri düşünebilirim. Ayrıca installSELinux bağlamlarını koruyabileceğini unutmayın .
lynxlynxlynx


1
@Gilles, başka bir konuyu işaret ettiğiniz için teşekkür ederim. Problemin bir kısmını çözer: sahiplik ve mod. Genişletilmiş özellikler ne olacak?
Grzegorz Wierzowiecki

1
@GrzegorzWierzowiecki Korkarım çok az araç genişletilmiş özellikleri destekliyor. Eğer önemliyse, katilin rsync önerisini kullanın.
Gilles 'SO- kötü olmayı kes

Btw. İşte xattrs çalışırken görebilirsiniz: KDE'de Dolphin GUI: imgur.com/oguuJNm veya dosyanın tarayıcılar tarafından ayarlandığı yerden URL: referanslar: gist.github.com/gwpl/a00e18bc150f1e3518335d13c5e46ad7 + freedesktop.org/ wiki / CommonExtendedAttributes + vhanda.in/blog/2014/07/tagging-your-files
Grzegorz Wierzowiecki

Yanıtlar:


13

Komut satırında biraz deneme yanılma işleminden sonra, cevabı bulduğumu düşünüyorum. Ancak, cpilgili bir cevap değildir .

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

Bu yapar:

-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

Referans için

    --no-OPTION             turn off an implied OPTION (e.g. --no-D)
-r, --recursive             recurse into directories

Bu son düzenleme kesinlikle bir hit. İkinci direkte / ile veya olmadan, son olarak tam olarak sorulan şeyi yapar, öyle görünür.
killermist

Sondaki eğik çizgi sadece ilk argüman üzerinde fark yaratır, ikincisinde değil. Kılavuz, sayfanın USAGEbölümünün 3. veya 4. paragrafında açıklanmaktadır rsync(1).
jw013

@ jw013 rsync belgelerini aylar önce tekrar tekrar okuduktan sonra, sonucum, sondaki eğik çizgilerin ister birinci (ikinci, üçüncü, vb.) ister son argümandaki "içine doğru" ima edildiği idi. Ama sonra tekrar, sık sık bir "içine" etkisi ima / talep etmek için son argümanda bir / ile komutlarımı sonlandırıyorum.
killermist

Bağırsak duygularımı tüm dizin özniteliklerini kopyalamak ve hiçbir normal dosya olurdu rsync -a -AX --include='*/' --exclude='*'. Test etmedim.
Gilles 'SO- kötü olmayı bırak'

@ jw013 Bu yanıtı aramanıza yardımcı olduğunuz için teşekkür ederim. Küçük sanal alan test ortamımda çok fazla seçenek denedim ve yaklaşmaya devam ettim, ancak bir kısmının doğru çalışmaması.
killermist

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

2
Bu özyineli olarak çalışmaz ve ACL'leri veya genişletilmiş öznitelikleri kopyalamayacağına inanıyorum.
Mat

1
Özyinelemeli olması gerekmiyor: OP "dizin içeriğinin kendisi değil" istedi ve kabul edilen cevap rsync'e söyler --no-recursive. Bu yanıtın sorunu, ACL veya XATTR yapmamasıdır.
ShadSterling

0
cp -rfp from_dir to_dir
  • -r - özyinelemeli
  • -f - güç
  • -p - nitelikleri koru: mod, sahiplik, zaman damgaları

Ayrıca
smremde

0

Anlamıyorum çünkü diğerleri için çalışıyor gibi görünüyor, ama rsync yöntemi ZFS ile FreeBSD benim için başarısız. Hiçbir şey olmuyor. Ancak Jean-François Dockes'in yöntemi işe yarıyor. (bkz: https://www.lesbonscomptes.com/pxattr/ ) Kaynak dizin = A ve hedef dizin = B, orijinal sorudan.

pxattr -lR A > tmp.EAs

(A dizgisini B, s / A / B / olarak değiştirmek için tmp'nin ilk satırını düzenleyin)

pxattr -S tmp.EAs

Yani, sadece başkasının yöntemini önermiyorsunuz ; başka birinin programını öneriyorsun , değil mi? Tamam, ama az bilinen standart olmayan bir programla ilgili dokümanları aramak için beş dakika harcadım. İnsanların az bilinen standart dışı bir programı indirmelerini tavsiye ettiğinizi daha açık bir şekilde belirtmeniz iyi olurdu.
G-Man,

shrug Liman ağacında. Bu tam olarak standart değil. Bu kadar belirsiz değil pyxattrve ben de denedim. Bu çatlaması zor bir yemişti. Sözde gnu cp bunun için çalışıyor, ama bunu yapamam. Genişletilmiş Özellikler bundan daha iyisini hak ediyor. Ayrıca, pxattr en azından linux, osx ve bsd altında çalışır.
cira

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

burada dst_dir - bir hedef dir. Veya:

rsync -dADXgot src_dir dst_dir

burada dst_dir - hedef dizini içeren bir dizin ya da var olmayan bir hedef dizidir.

Rsync man sayfasından:

    -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

Bir dizini kopyalamak için "-r" gerekir.


2
Sanırım seni yanlış anladım, içeriğe ihtiyacınız yok, sadece xattr. SELinux içinse, orijinal dizine (A) başvuran chcon'u kullanabilirsiniz.
tripledes

-rİçlerindeki tüm alt dizinlerin ve dosyaların kopyasını ifade eder ... Tüm ağacı kopyalamak istemiyorum ... İçeriğini etkilemeden yalnızca bir ve sadece bir dizin için nitelikleri kopyalamak istiyorum.
Grzegorz Wierzowiecki
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.