Giải nén tập tin và thư mục với quyền được chỉ định


11

Tôi đóng gói một thư mục có nhiều thư mục con và tệp trong Windows với 7zip, tải lên VPS và sau đó chạy lệnh:

tar -xvzf file.tar.gz

sau đó tất cả các tệp và thư mục đã giải nén có quyền 777. Làm cách nào để tôi có được các thư mục sẽ có quyền 755 và các tệp 644?


Có một trang web tên là "Command Line Fu" cũng có rất nhiều ý tưởng khác.
djangofan

Câu trả lời:


13

Nếu bạn đang chạy tar(1)như một người dùng thông thường, nó sẽ áp dụng umasktheo mặc định của bạn . Nếu bạn đang chạy tar(1)như root, sau đó bạn có thể cung cấp --no-same-permissionstùy chọn dòng lệnh để hỏi tar(1)phải tôn trọng umask.

Vì vậy: hoặc chạy nó như một người dùng thông thường:

umask 022
tar zxvf file.tar.gz

hoặc chạy cái này như root:

umask 022
tar zxvf file.tar.gz --no-same-permissions

Bạn có thể muốn dính umask 022vào của bạn ~/.bashrc, ~/.bash_profilehoặc ~/.profile. (Xem bash(1)trang hướng dẫn để biết chi tiết đầy đủ về các tập tin khởi động. Nó phức tạp.)

Chi tiết về umaskcó thể được tìm thấy trong trang của shell của bạn, trang chủ umask(2)cuộc gọi hệ thống hoặc umask(1posix)trang chủ tiện ích do POSIX cung cấp (nếu bạn đã manpages-posixcài đặt).


umask 022 tar zxvf file.tar.gz -> điều này yêu cầu tôi xác nhận cho từng tệp riêng nếu tôi muốn giải nén nó

Bạn có đang viết quá nhiều tập tin hiện có khi làm như vậy không?
đăng

6

Chạy các lệnh sau trong thư mục gốc của thư mục để đặt quyền mong muốn cho thư mục và tệp của bạn:

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

Hãy nhận biết khoảng trống giữa dấu ngoặc nhọn đóng và dấu gạch chéo ngược


tìm: thiếu đối số cho `-exec '

có ý tưởng nào tại sao lệnh này nói với tôi "find: thiếu đối số với` -exec '"không? Cảm ơn.

Thêm một khoảng trống giữa khung nhọn đóng và\;
poussma

2

Nếu bạn sử dụng chữ X trong chmodbạn có thể sử dụng nó để đặt quyền thực thi chỉ trên các thư mục. I E

chmod -R ugo+X .

1

Tôi tìm thấy giải pháp này làm việc cho tôi. Đối với thư mục và thư mục con:

chmod -R 777 */

Và cho tất cả các tệp (cũng trong thư mục và thư mục con):

find . -type f -name "*" | xargs chmod 644

Tất cả các ý kiến ​​hoan nghênh nếu đây không phải là một cách tốt để làm điều đó. Tôi mới bắt đầu học Linux.

Theo các bình luận, một giải pháp mạnh mẽ hơn giúp xử lý các ký tự đặc biệt sẽ là:

find . -type f -print0 | xargs -0 chmod 644  # For files
find . -type d -print0 | xargs -0 chmod 755  # For directories

Nhưng lệnh thứ hai cung cấp cho tôi trên nhiều tệp đầu ra này: chmod: không thể truy cập the': No such file or directory chmod: cannot access Logo.txt ': Không có tệp hoặc thư mục như vậy chmod: không thể truy cập `./blog/wp-content/theme/OneRoom/LOGO': Không có tệp đó hoặc di

2
777là nguy hiểm và chỉ áp dụng cho một số rất nhỏ các hệ thống.
đăng

2
Để cải thiện lệnh thứ hai của bạn , find . -type f -print0 | xargs -0 chmod 644. Điều -name "*"này là không cần thiết và xargs(1)sẽ phân tích tên tệp trên dấu cách hoặc dòng mới trừ khi bạn sử dụng -0- phân tích tên tệp trên ký tự ASCII NUL, không thể xuất hiện trong tên tệp. Các -print0cho find(1)hỏi nó để định dạng đầu ra của nó trong một chế độ thích hợp cho xargs -0đầu vào.
đăng

0

tìm thấy . -type f -exec chmod 644 {} \;


2
Chào mừng bạn đến với Superuser, xin được thông báo 1 câu trả lời hiếm khi được chấp nhận, bạn có thể nói rõ hơn về câu trả lời của mình không?
50-3
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.