2010-02-01 33 views
10

Khi sử dụng lệnh find, tại sao nó rằng sau thành công sẽ bỏ qua các thư mục ẩn (những bắt đầu với một giai đoạn) trong khi phù hợp với tất cả mọi thứ khác:Ignore/prune ẩn thư mục với GNU tìm lệnh

find . -not \(-type d -name ".?*" -prune \)

nhưng điều này sẽ không phù hợp với bất cứ điều gì ở tất cả:

find . -not \(-type d -name ".*" -prune \)

sự khác biệt duy nhất là dấu chấm hỏi. Không nên lệnh sau cũng phát hiện và loại trừ các thư mục bắt đầu bằng dấu chấm?

+0

thuộc về superuser.com – t0mm13b

+3

@tommie - phải không? phụ thuộc vào việc nó đang được sử dụng tương tác hay là một phần của tập lệnh; trong trường hợp thứ hai, nó được cho là một câu hỏi phát triển phần mềm hợp pháp. –

+0

bị từ chối vì không liên quan đến tiêu đề đề cập đến "GNU find" trong câu trả lời đã chọn. – danorton

Trả lời

8

Sau lệnh mận khô tất cả mọi thứ vì nó mận . - thử này để thấy sự khác biệt:

$ ls -lad .* 
. 
.. 
.dotdir 
$ ls -lad .?* 
.. 
.dotdir 

Bạn thấy rằng trong một giây, . không được bao gồm bởi vì nó chỉ là một nhân vật dài. Quả cầu ".?*" chỉ bao gồm các tên tệp dài ít nhất hai ký tự (dấu chấm, cộng với bất kỳ ký tự đơn nào, không bắt buộc, cộng với bất kỳ chuỗi ký tự nào bằng 0 hoặc nhiều ký tự).

Nhân tiện, find không phải là lệnh Bash.

+0

"tìm thấy không phải là một lệnh Bash" - cuộc gọi tốt, thay đổi tiêu đề để phản ánh điều này – kostmo

2

Lệnh thứ hai sẽ tự động cắt xuống . - thư mục bạn đang chạy find chống lại - đó là lý do tại sao nó không tạo ra kết quả.

+0

nghĩ rằng bạn có nghĩa là "sau" – kostmo

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