Làm cách nào để sao chép / sao chép tất cả các thuộc tính tệp / thư mục vào các tệp / thư mục khác nhau?


14

Tôi muốn sao chép các thuộc tính (quyền sở hữu, nhóm, ACL, thuộc tính mở rộng, v.v.) của một thư mục này nhưng không phải chính nội dung thư mục.

Điều này không hoạt động:

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

Lưu ý: Nó không phải là cp.


1
Bạn đã không vượt qua -r, vì vậy nó đang bỏ qua các thư mục. Nhưng tôi đoán bạn chỉ muốn sao chép các thuộc tính, không phải nội dung? Tôi chỉ có thể nghĩ về những vụ hack xấu xí. Cũng lưu ý rằng installcó thể bảo tồn bối cảnh SELinux.
lynxlynxlynx


1
@Gilles, cảm ơn bạn đã chỉ đến một chủ đề khác. Nó giải quyết một phần của vấn đề: quyền sở hữu và chế độ. Còn các thuộc tính mở rộng thì sao?
Grzegorz Wierzowiecki

1
@GrzegorzWierzowiecki Tôi e rằng rất ít công cụ hỗ trợ các thuộc tính mở rộng. Nếu chúng quan trọng, hãy sử dụng đề xuất rsync của killermist.
Gilles 'SO- ngừng trở nên xấu xa'

Btw. Dưới đây là những ví dụ tốt đẹp, nơi người ta có thể nhìn thấy xattrs trong hành động: GUI của Dolphin trong KDE: imgur.com/oguuJNm hoặc URL từ nơi tập tin được tải về thiết lập bởi các trình duyệt: tham khảo: gist.github.com/gwpl/a00e18bc150f1e3518335d13c5e46ad7 + freedesktop.org/ wiki / CommonExtendsAttribut + vhanda.in/blog/2014/07/tagging-your-files
Grzegorz Wierzowiecki

Câu trả lời:


13

Sau một chút thử nghiệm và lỗi trên dòng lệnh, tôi nghĩ rằng tôi đã tìm thấy câu trả lời. Nhưng nó không phải là một cpcâu trả lời liên quan.

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

Cái này không

-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

Để tham khảo

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

Chỉnh sửa cuối cùng đó chắc chắn là một hit ở đó. Có hoặc không có a / trên thư mục thứ hai, điều đó cuối cùng thực hiện chính xác những gì được yêu cầu, nó trông như thế.
killermist

Dấu gạch chéo chỉ tạo ra sự khác biệt trong đối số thứ nhất, không phải là đối số thứ hai. Nó được giải thích trong đoạn 3 hoặc 4 của USAGEphần của rsync(1)trang man.
jw013

@ jw013 Sau khi đọc tài liệu rsync nhiều lần, nhiều tháng trước, kết luận của tôi là các dấu gạch chéo là "hàm", cho dù trong đối số thứ nhất (thứ hai, thứ ba, v.v.) hay cuối cùng. Nhưng sau đó, một lần nữa, tôi thường kết thúc các lệnh của mình bằng một / trên đối số cuối cùng để ngụ ý / yêu cầu ảnh hưởng "vào".
sát thủ

Cảm giác ruột của tôi để sao chép tất cả các thuộc tính thư mục và không có tập tin thông thường rsync -a -AX --include='*/' --exclude='*'. Tôi chưa thử.
Gilles 'SO- đừng trở nên xấu xa'

@ jw013 Cảm ơn bạn đã giúp trả lời câu hỏi này. Tôi đã thử SO nhiều tùy chọn trên môi trường kiểm tra hộp cát nhỏ của mình và tiếp tục đến gần, nhưng có một phần của nó không hoạt động.
killermist

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

2
Điều này sẽ không hoạt động đệ quy và tôi tin rằng nó sẽ không sao chép ACL hoặc thuộc tính mở rộng.
Mat

1
Đây không phải là đệ quy: OP yêu cầu "không phải chính nội dung thư mục" và câu trả lời được chấp nhận cho rsync --no-recursive. Vấn đề với câu trả lời này là nó không thực hiện ACL hoặc XATTR.
ShadSterling

0
cp -rfp from_dir to_dir
  • -r - đệ quy
  • -f - lực lượng
  • -p - bảo toàn các thuộc tính: chế độ, quyền sở hữu, dấu thời gian

Cũng cần - chỉ đóng góp
smremde

0

Tôi không hiểu vì có vẻ như nó hoạt động với người khác, nhưng phương thức rsync không thành công đối với tôi trên FreeBSD với ZFS. Chẳng có gì xảy ra. Tuy nhiên phương pháp của Jean-François Dockes hoạt động. (xem: https://www.lesbonscomptes.com/pxattr/ ) Thư mục nguồn = A & thư mục đích = B, từ câu hỏi ban đầu.

pxattr -lR A > tmp.EAs

(chỉnh sửa dòng đầu tiên của tmp.EAs để thay đổi thư mục A thành B, s / A / B /)

pxattr -S tmp.EAs

Vì vậy, bạn không chỉ giới thiệu phương pháp của người khác ; bạn đang giới thiệu chương trình của người khác , phải không? Điều đó không sao, nhưng tôi chỉ lãng phí năm phút để tìm tài liệu về một chương trình không chuẩn ít được biết đến. Sẽ thật tuyệt nếu bạn nói rõ hơn rằng bạn đang khuyến nghị mọi người tải xuống một chương trình không chuẩn ít được biết đến.
G-Man nói 'Phục hồi Monica'

nhún vai Nó trong cây cổng. Điều đó không chính xác làm cho nó không chuẩn. Nó không tối nghĩa như vậy pyxattrvà tôi cũng đã thử nó. Đây là một loại hạt cứng để crack. Giả sử gnu cp hoạt động cho việc này, nhưng tôi không thể thực hiện được. Thuộc tính mở rộng xứng đáng tốt hơn thế này. Ngoài ra, pxattr hoạt động ít nhất dưới linux, osx, & bsd.
cira

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

trong đó dst_dir - là một thư mục tiêu. Hoặc là:

rsync -dADXgot src_dir dst_dir

trong đó dst_dir - là một thư mục chứa thư mục đích hoặc một thư mục đích không tồn tại.

Từ trang người đàn ông 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

Bạn cần "-r" để sao chép một thư mục.


2
Tôi nghĩ rằng tôi đã hiểu lầm bạn, bạn không cần nội dung, chỉ cần xattr. Nếu đó là cho SELinux, bạn có thể sử dụng chcon tham chiếu thư mục gốc (A).
tăng gấp ba

-r ngụ ý sao chép tất cả các thư mục con và tệp trong đó ... Tôi không muốn sao chép toàn bộ cây ... Tôi muốn sao chép các thuộc tính cho chỉ một và chỉ một thư mục - mà không ảnh hưởng đến nội dung của nó.
Grzegorz Wierzowiecki
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.