2012-03-01 102 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 
相关问题