Bạn có thể thay đổi quyền cho tất cả các tệp ngoại trừ một thư mục trong Linux không?


7

Có cách nào để thay đổi tất cả các quyền của tệp / thư mục ngoại trừ một thư mục trong một lệnh dòng lệnh Linux không?


grep -v "directory to exclude"

Câu trả lời:


5

Giả sử rằng bạn muốn đặt bit cho phép 755 theo cách đệ quy cho nội dung của các thư mục trong thư mục làm việc hiện tại của bạn, ngoài nội dung của thư mục được gọi "nameOfFolderToBeExcluded" :

 chmod 755 -R $(ls | awk '{if($1 != "nameOfFolderToBeExcluded"){ print $1 }}')

4

Bạn có thể dùng find để tìm kiếm tất cả các tệp không khớp với tên tệp đã cho và exec một lệnh trên tất cả các tệp như vậy được tìm thấy như:

Giả sử bạn cần loại trừ thư mục test và cấp quyền 755 cho tất cả các tệp và thư mục khác. Điều này sẽ được thực hiện từ ngọn cây.

find ! -name test -exec chmod 755 {} \;

Thử nghiệm

mtk@mtk4-laptop:$ touch a1.txt a2.txt a3.txt test
mtk@mtk4-laptop:$ ls -lrt
total 0
-rw-rw-r-- 1 mtk mtk 0 Sep 17 23:55 test
-rw-rw-r-- 1 mtk mtk 0 Sep 17 23:55 a3.txt
-rw-rw-r-- 1 mtk mtk 0 Sep 17 23:55 a2.txt
-rw-rw-r-- 1 mtk mtk 0 Sep 17 23:55 a1.txt
mtk@mtk4-laptop:$ find ! -name test -exec chmod 777 {} \;
mtk@mtk4-laptop:$ ls -lrt
total 0
-rw-rw-r-- 1 mtk mtk 0 Sep 17 23:55 test
-rwxrwxrwx 1 mtk mtk 0 Sep 17 23:55 a3.txt*
-rwxrwxrwx 1 mtk mtk 0 Sep 17 23:55 a2.txt*
-rwxrwxrwx 1 mtk mtk 0 Sep 17 23:55 a1.txt*
mtk@mtk4-laptop:$ 

Các quyền cho tập tin test vẫn không thay đổi. Tương tự được áp dụng cho các thư mục.


Điều này chỉ loại trừ các tệp theo tên đó - không phải thư mục. Thử mkdir test + touch a1.txt a2.txt a3.txt, và sau đó thực hiện lệnh.
Kraang Prime

2

Cái quái gì vậy?

Nếu bạn đang chạy bash (có thể nếu bạn đang sử dụng Linux), bạn có thể kiểm tra extglob, cung cấp cho bạn nhiều tùy chọn hơn cho toàn cầu hóa, bao gồm cả "toàn cầu âm" !()

shopt -s extglob
chmod 774 !(file-to-ignore)

1

Sử dụng find đơn giản hơn như thế này:

find <from_where_to_change> -not -path "*/<excluded_dir_name>*" [-and -not -path "*/<another_excluded_dir_if_you_want>*"] -exec chown <user>[:<group>] {} \;

Trong trường hợp của tôi, đó là:

find /data/project -not -path "*/.svn*" -exec chown :www-data {} \;

Bằng cách này, tôi đã thay đổi đệ quy nhóm trên thư mục / dữ liệu / dự án, ngoại trừ tất cả các thư mục ".svn" theo cách đệ quy.


0

Cách dễ dàng hơn với các lệnh cơ bản:

chmod 755 -R $(ls -A|grep -v 'directory_name_to_exclude/*')

0

Tôi đang sử dụng lệnh dưới đây, nó sẽ cung cấp các tệp 644 và thư mục 755 cho tất cả các tệp và thư mục trong thư mục làm việc hiện tại nhưng sẽ loại trừ thư mục var để cung cấp quyền.

find . -not -path "*/var*" -type f -exec chmod -c 0644 {} \; && find . -not -path "*/var*" -type d -exec chmod -c 0775 {} \;
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.