Làm thế nào tôi nên toàn cầu cho tất cả các tập tin ẩn?


22

Tôi muốn thực hiện một số hành động (nói chown) trên tất cả các tệp ẩn trong một thư mục.

Tôi biết rằng điều này .*không một ý tưởng tốt vì nó cũng sẽ tìm thấy dòng điện .và phụ huynh ..thư mục (Tôi biết rằng rmsẽ không hoạt động trên ...nhưng lệnh khác, bao gồm chownchmod, hạnh phúc sẽ có hiệu lực)

Nhưng tất cả các tập tin ẩn của tôi có tên khác nhau!

Làm thế nào tôi nên toàn cầu cho tất cả các tập tin ẩn trong khi loại trừ ...?

Câu trả lời:


20

Bạn có thể sử dụng extglobmẫu sau :

.@(!(.|))
  • .phù hợp với một nghĩa đen .lúc đầu

  • @()là một extglobmẫu, sẽ khớp với một trong các mẫu bên trong, vì chúng ta chỉ có một mẫu bên trong nó, nó sẽ chọn mẫu đó

  • !(.|)là một extglobmẫu khác (lồng nhau), khớp với bất kỳ tệp nào không có hoặc một .; Như chúng ta đã khớp .lúc bắt đầu, toàn bộ mẫu này sẽ khớp với tất cả các tệp bắt đầu bằng .ngoại trừ ....

extglobđược bật trên các phiên tương tác bashtheo mặc định trong Ubuntu. Nếu không, kích hoạt nó trước:

shopt -s extglob

Thí dụ:

$ echo .@(!(.|))
.bar .foo .spam

Đây rõ ràng là một điều tuyệt vời tôi cần tìm hiểu! Cảm ơn bạn đã giảng dạy
Zanna

@Zanna Vui mừng tôi có thể giúp :)
heemayl

2
Mục đích của là @()gì? Đơn giản .!(.|)dường như làm việc giống hệt nhau.
Kyle Strand

1
Tôi biết rằng đây là cũ, nhưng tôi có cùng một câu hỏi như @KyleStrand. Trong các thử nghiệm của tôi, !(.|)hoạt động như nhau. Có bất kỳ mục đích đằng sau @()trong bối cảnh này?
Paddy Landau

Là nhân vật bang một phủ định? Nó không được đề cập và đọc lời giải thích của bạn, tôi có ấn tượng rằng mẫu đó khớp với dấu chấm và nhân đôi, nhưng bạn mô tả rõ ràng các tệp khớp với dấu chấm bắt đầu, ngoại trừ chỉ hai cái đó.
người dùng không xác định

20
 GLOBIGNORE=".:.."

để che giấu. và .. thư mục. Điều này cũng đặt dotglobtùy chọn: *khớp cả tệp ẩn và tệp không ẩn.

Bạn cũng có thể làm

shopt -s dotglob

Gilles :)


9

Bạn có thể sử dụng một find lệnh ở đây. Ví dụ như một cái gì đó như

find -type f -name ".*" -exec chmod 775 {} \;

Điều này sẽ tìm các tập tin ẩn và thay đổi quyền


Chỉnh sửa để bao gồm nhận xét của @gerrit:

find -type f -maxdepth 1 -name ".*" -exec chmod 775 {} \;

Điều này sẽ giới hạn tìm kiếm hàng đầu thư mục hiện tại thay vì tìm kiếm đệ quy.


4
Bạn có thể muốn thêm một -maxdepth 1ở đây cho nó để phù hợp hơn với hành vi trong câu hỏi và các câu trả lời khác.
gerrit
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.