2015-12-17 24 views
7

Tôi đang sao chép tệp từ nguồn này sang vị trí khác. Nguồn không thuộc sở hữu của tôi và sự cho phép đối với các tệp ở nguồn là ---- rwx ---. Sự cho phép của các tập tin đối phó với thư mục đích được sở hữu bởi tôi là ---- r-x ---. Sự cho phép của thư mục đích là drwxrwsrwx. Làm thế nào để tôi có các tập tin với cùng một sự cho phép của thư mục đích. Tôi đã thử "cp --no-preserve = all" nhưng nó không hoạt động (vẫn là sự cho phép tương tự).Cách sao chép tệp và cấp cho họ quyền truy cập thư mục đích

Trả lời

11

Hãy thử điều này:

cp --no-preserve=mode,ownership $backupfile $destination 
1

Hãy để tôi nói lại rằng để "Làm thế nào để bảo vệ quyền của thư mục đích trên bản sao?"
Tôi không thể lấy tín dụng cho câu trả lời vì tôi vừa kết hợp một vài câu trả lời mà tôi tìm thấy trên tự nhiên. Vì vậy, ở đây nó đến.

Firstly

Quyền thường không được nhân giống bằng thư mục mà tập tin đang được sao chép vào, chứ không phải quyền mới được điều khiển bởi umask của người dùng. Tuy nhiên, khi bạn sao chép một tệp từ vị trí này sang vị trí khác thì đó là một trường hợp đặc biệt trong đó umask của người dùng về cơ bản bị bỏ qua và các quyền hiện có trên tệp được giữ nguyên.

nào giải thích tại sao bạn không thể trực tiếp tuyên truyền các điều khoản của src đến dst thư mục.

Tuy nhiên, có cách giải quyết hai bước cho vấn đề này.

  1. cp-metadata: Sao chép các thuộc tính và chỉ các thuộc tính bạn muốn giữ lại thư mục nguồn. Dưới đây là một kịch bản nhanh chóng mà có thể làm điều này:
#!/bin/bash 
# Filename: cp-metadata 

myecho=echo 
src_path="$1" 
dst_path="$2" 

find "$src_path" | 
    while read src_file; do 
    dst_file="$dst_path${src_file#$src_path}" 
    $myecho chmod --reference="$src_file" "$dst_file" 
    $myecho chown --reference="$src_file" "$dst_file" 
    $myecho touch --reference="$src_file" "$dst_file" 
    done 

Bạn có thể bỏ qua các lệnh touch nếu bạn không muốn giữ các dấu thời gian. Thay thế myecho=echo bằng myecho= để thực sự thực hiện các lệnh.
tâm rằng kịch bản này nên được chạy trong chế độ sudo để có thể để chạy chownchmod hiệu quả

  1. cp --preserve: Sau khi bạn đã chạy thành công lệnh đầu tiên nay đã đến lúc sao chép nội dung cùng với các thuộc tính vào thư mục dst .

    --preserve [= DANH_SÁCH_THUỘC_TÍNH]
    giữ các thuộc tính quy định (mặc định: chế độ, quyền sở hữu, timestamps), nếu thuộc tính bổ sung có thể: bối cảnh, liên kết, xattr, tất cả

    \cp -rfp $src_dir $dst_dir nên làm bạn muốn gì.

Các vấn đề liên quan