จะโคลน / คัดลอกไฟล์ / ไดเร็กตอรี่แอตทริบิวต์ทั้งหมดไปยังไฟล์ / ไดเร็กตอรี่อื่นได้อย่างไร?


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 ของ killermist
Gilles 'หยุดความชั่วร้าย'

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

หลังจากทดลองใช้และข้อผิดพลาดเล็กน้อยใน commandline ฉันคิดว่าฉันพบคำตอบแล้ว แต่มันไม่ใช่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

การแก้ไขครั้งล่าสุดนั้นเป็นที่นิยมอย่างแน่นอน มีหรือไม่มี / บน dir ที่สองว่าในที่สุดก็ทำสิ่งที่ถูกถามมันดูเหมือนว่า
killermist

เครื่องหมายสแลชต่อท้ายสร้างความแตกต่างให้กับอาร์กิวเมนต์แรกเท่านั้นไม่ใช่อาร์กิวเมนต์ที่สอง มันอธิบายไว้ในย่อหน้าที่ 3 หรือ 4 ของUSAGEส่วนของrsync(1)man page
jw013

@ jw013 หลังจากอ่านเอกสาร rsync ซ้ำ ๆ หลายเดือนที่ผ่านมาข้อสรุปของฉันคือเครื่องหมายสแลชต่อท้ายมีความหมายว่า "เป็น" ไม่ว่าจะเป็นอาร์กิวเมนต์แรก (วินาที, สาม, ฯลฯ ) หรืออาร์กิวเมนต์สุดท้าย แต่จากนั้นอีกครั้งฉันมักจะจบคำสั่งของฉันด้วย / ในอาร์กิวเมนต์สุดท้ายเพื่อบอกเป็นนัย / ความต้องการ "เป็น" ส่งผลกระทบต่อ
killermist

rsync -a -AX --include='*/' --exclude='*'ความรู้สึกของฉันที่จะคัดลอกแอตทริบิวต์ไดเรกทอรีและไม่มีแฟ้มปกติจะเป็น ฉันยังไม่ได้ทดสอบ
Gilles 'หยุดความชั่วร้าย'

@ jw013 ขอบคุณที่ช่วยให้ได้คำตอบในการโทรออกฉันลองใช้ตัวเลือกมากมายในสภาพแวดล้อมการทดสอบ Sandbox เล็ก ๆ ของฉันและเข้ามาใกล้ แต่ก็มีบางส่วนที่ไม่ถูกต้อง
killermist

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

2
สิ่งนี้จะไม่ทำงานซ้ำและฉันเชื่อว่ามันจะไม่คัดลอก ACLs หรือแอตทริบิวต์เพิ่มเติม
จ้า

1
มันไม่ควรจะเป็น recursive: สหกรณ์ถาม "ไม่ได้เนื้อหาไดเรกทอรีของตัวเอง" และคำตอบที่ได้รับการยอมรับบอก --no-recursiversync ปัญหากับคำตอบนี้คือมันไม่ได้ทำ ACLs หรือ XATTRs
ShadSterling


0

ฉันไม่เข้าใจเพราะมันใช้งานได้กับคนอื่น แต่วิธี rsync ล้มเหลวสำหรับฉันใน FreeBSD ด้วย ZFS ไม่มีอะไรเกิดขึ้น. อย่างไรก็ตามวิธีการของ Jean-François Dockes ใช้ได้ผล (ดู: https://www.lesbonscomptes.com/pxattr/ ) ไดเรกทอรีแหล่ง = A & ไดเรกทอรีปลายทาง = B จากคำถามเดิม

pxattr -lR A > tmp.EAs

(แก้ไขบรรทัดแรกของ tmp.EAs เพื่อเปลี่ยนไดเรกทอรี A เป็น B, s / A / B /)

pxattr -S tmp.EAs

ดังนั้นคุณไม่เพียงแค่แนะนำวิธีการของคนอื่น คุณแนะนำคนอื่นของโปรแกรม ,ใช่มั้ย? ไม่เป็นไร แต่ฉันเพิ่งเสียเวลาไปห้านาทีในการค้นหาเอกสารในโปรแกรมที่ไม่ได้มาตรฐาน คงจะดีถ้าคุณพูดให้ชัดเจนยิ่งขึ้นว่าคุณแนะนำให้คนดาวน์โหลดโปรแกรมที่ไม่ได้มาตรฐาน
G-Man กล่าวว่า 'Reinstate Monica'

ยัก มันอยู่ในต้นไม้พอร์ต ไม่ได้ทำให้มันไม่ได้มาตรฐาน มันไม่คลุมเครือเหมือนกัน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 เป้าหมายที่ไม่มีอยู่

จากหน้า 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.