2012-03-01 24 views
8

Tôi muốn kiểm tra tất cả các tệp chính có trong số /proc của mình. Nhưng /proc có vô số thư mục tương ứng với các quy trình đang chạy. Tôi không muốn các thư mục này được liệt kê. Tất cả các tên của các thư mục này chỉ chứa các số. Vì tôi nghèo trong các biểu thức chính quy, bất cứ ai có thể cho tôi biết số regex mà tôi cần gửi tới ls để làm cho nó KHÔNG để tìm kiếm các tệp/thư mục có số trong tên của chúng?Liệt kê tất cả các tệp không bắt đầu bằng số

CẬP NHẬT: Cảm ơn tất cả các câu trả lời! Nhưng tôi rất thích có một giải pháp một mình ls thay vì giải pháp ls+grep. Các giải pháp một mình ls cung cấp cho đến bây giờ dường như không hoạt động!

Trả lời

6

Tất cả các file và thư mục trong /proc mà không chứa số (hay nói cách khác, không bao gồm các thư mục quá trình):

ls -d /proc/[^0-9]* 

Tất cả các file một cách đệ quy dưới /proc mà không bắt đầu với một số:

find /proc -regex '.*/[0-9].*' -prune -o -print 

Nhưng điều này cũng sẽ loại trừ tệp số trong thư mục con (ví dụ: /proc/foo/bar/123). Nếu bạn chỉ muốn loại trừ các tệp cấp cao nhất có số:

find /proc -regex '/proc/[0-9].*' -prune -o -print 

Giữ lại! Điều này không có nghĩa là bất kỳ regular files nào được tạo bởi touch /proc/123 hoặc các mục tương tự sẽ bị loại trừ? Về mặt lý thuyết có, nhưng tôi không nghĩ rằng bạn có thể làm điều đó. Thử tạo một tệp cho một PID không tồn tại:

$ sudo touch /proc/123 
touch: cannot touch `/proc/123': No such file or directory 
+0

'ls -d/proc/[^ 0-9] *' liệt kê chính xác các thư mục chứa các số (mà tôi không muốn :() tức là thư mục quá trình! Có gì đó ở đây quá! –

+0

@Stacker: Bạn đang sử dụng hệ điều hành nào Tôi đã chạy cái này trên hai bản phân phối khác nhau (Ubuntu 64 bit và Linux Mint 64 bit, GNU 'ls' 8.5 trên một máy ít nhất), và nó chỉ hiển thị các tệp và các thư mục * không có * số, từ '/ proc/acpi' đến'/proc/zoneinfo'. * 'ls' nổi tiếng là không thể chuyển đổi *, do đó, nó có thể chỉ là' -d' thực hiện điều gì đó hoàn toàn khác trong phiên bản của bạn – l0b0

+0

Rất tiếc Bạn đã đúng! Tôi chạy lệnh của bạn trên Ubuntu 11.10 của tôi và nó hoạt động tốt! Tôi đã ở trên AIX 6.1, một ngày khác (được xác nhận lại lần nữa) và nó phá vỡ !! Tôi bối rối là tại sao! 'Man ls' và tìm kiếm '-d' gần như đưa ra lời giải thích tương tự trên cả hai hệ thống mà các thư mục sẽ được xử lý như bất kỳ tệp nào khác! –

2

Sử dụng grep với -v để thông báo in tất cả các dòng không khớp với mẫu.

ls /proc | grep -v '[0-9+]' 
0

Sau regex phù hợp với tất cả các nhân vật ngoại trừ số

^[\D]+?$ 

Hy vọng nó sẽ giúp!

7

Bạn không cần phải grep, chỉ ls:

ls -ad /proc/[^0-9]* 

nếu bạn muốn tìm kiếm việc sử dụng toàn bộ cấu trúc thư mục con tìm:

find /proc/ -type f -regex "[^0-9]*" -print 
+0

Tôi nghĩ có gì đó sai với giải pháp 'ls' của bạn. Nó liệt kê tất cả các tập tin bên trong các thư mục bắt đầu bằng các con số! Tôi không muốn các thư mục bắt đầu với số ở tất cả! –

+0

Ngay cả giải pháp 'tìm' cũng đang đổ xô vào các thư mục có số trong tên của chúng! Tôi có thiếu gì không? –

+0

-1 Có ai ngoại trừ @Stacker thử các lệnh này không?'Ls' liệt kê các tệp chính xác, nhưng cũng liệt kê các nội dung thư mục của'/proc/*/'. Và 'find' rõ ràng liệt kê tất cả các thư mục quá trình và các tệp của chúng. – l0b0

0

Vì lợi ích của các hoàn thành. Bạn có thể áp dụng câu trả lời của Mithandir với tìm.

find . -name "[^0-9]*" -type f 
Các vấn đề liên quan