2012-03-01 101 views
8

我想檢查我的/proc中存在的所有關鍵文件。但是/proc有與運行進程相對應的無數目錄。我不希望這些目錄被列出。所有這些目錄的名字只包含數字。正如我在正則表達式窮人,誰能告訴我什麼regex,我需要發送到ls,使其不是搜索其名稱中的數字的文件/目錄?列出所有不以數字開頭的文件

UPDATE:感謝所有答覆!但我很想擁有一個ls獨立解決方案,而不是ls+grep解決方案。迄今爲止提供的ls單獨解決方案似乎並不奏效!

回答

6

/proc所有文件和目錄不包含數字(換句話說,排除處理目錄):

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

的所有文件下遞歸地/proc不以數字開頭:

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

但是這也將排除中的數字文件子目錄(例如/proc/foo/bar/123)。如果你想排除只有頂級文件的數字:

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

再次堅持!這是否意味着touch /proc/123等創建的任何regular files將被排除?理論上是的,但我認爲你不能這樣做。嘗試創建一個不存在的PID文件:

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

'ls -d/proc/[^ 0-9] *'精確地​​列出了包含數字的目錄(我不想:()即處理目錄!這裏也有些東西可疑! – 2012-03-01 14:58:34

+0

@Stacker:你在哪個操作系統上?ls --version'返回的是什麼?我在兩個不同的發行版上運行了這個(至少在一臺機器上是Ubuntu 64位和Linux Mint 64位,GNU'ls' 8.5),它只顯示文件和目錄*不帶*號,從'/ proc/acpi'到'/ proc/zoneinfo'。*'ls'是臭名昭着的不可移植的*,所以它可能只是因爲'-d'在你的版本中做了完全不同的事情 – l0b0 2012-03-02 18:44:11

+0

哎呀!你是對的!我在你的Ubuntu 11.10上運行了你的命令,它工作得很好!我在AIX 6.1上,有一天(再次確認),它打破了!!我很困惑,爲什麼!在兩個系統上搜索'-d'幾乎給出了類似的解釋,即目錄將被視爲任何其他文件!爲什麼這不相同? – 2012-03-03 06:51:25

2

使用grep與-v告訴它打印所有行不匹配的模式。

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

繼正則表達式中的所有字符匹配除了數字

^[\D]+?$ 

希望它能幫助!

1

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

7

你不需要的grep,只是ls

ls -ad /proc/[^0-9]* 
如果你想搜索整個子目錄結構查找功能

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

我認爲你的'ls'解決方案有些問題。它列出了以數字開頭的文件夾內的所有文件!我不想要以數字開頭的目錄! – 2012-03-01 11:35:30

+0

即使是「find」解決方案也會衝入名稱中帶有數字的文件夾!我錯過了什麼? – 2012-03-01 11:46:00

+0

-1除了@Stacker之外,有沒有人試過這些命令?'ls'列出正確的文件,還列出'/ proc/* /'的目錄內容。 'find'清楚地列出了所有的進程目錄及其文件。 – l0b0 2012-03-01 12:07:41

0

對於着想完成。您可以將Mithandir的答案與find一起應用。

find . -name "[^0-9]*" -type f 
相關問題