我有以下文件
tcpdump-12
tcpdump-12.delay
tcpdump-24
tcpdump-24.delay
有没有办法ls
只有文件
tcpdump-12
tcpdump-24
我能做到
ls tcpdump-[[:digit:]][[:digit:]]
但我正在寻找一些更通用的东西,可以使用任意数量的数字,如tcpdump- [0-9] +,如果我使用的是vim或python正则表达式。
答案 0 :(得分:17)
$ ls
tcpdump-12 tcpdump-12.delay tcpdump-24 tcpdump-24.delay
$ shopt -s extglob
$ ls tcpdump-+([[:digit:]])
tcpdump-12 tcpdump-24
答案 1 :(得分:7)
如果您确定所有不需要的文件以“.delay”结尾,则可以执行以下操作:
ls --ignore '*.delay'
ls --ignore '*.delay'
答案 2 :(得分:4)
我不确定你为什么使用[[:digit:]]
而不是[0-9]
;你是否齐心协力,文件名可能包含其他类型的数字?
其他大多数答案都很好,但是快速而肮脏的解决方案是:
ls tcpdump-*[0-9]
它适用于您拥有的特定文件集,但它也会匹配tcpdump-FOO7
等文件名。
在通用脚本中,值得精确匹配您想要的模式。在一个简短的交互式shell命令中,恰好适用于当前情况的草率快捷方式可能很有用。
答案 3 :(得分:1)
您可以将ls的输出传输到grep中。 Grep有一个“反转”选项(显示不匹配的行),所以你可以这样做:
ls tcpdump-* | grep -v '\.delay$'
答案 4 :(得分:0)
如果您不介意通过外部过滤器传递它们,可以使用:
ls -1 tcpdump-* | grep '^tcpdump-[0-9]*$'
请记住,最终会为每行提供一个而不是一个很好的多列ls
输出。
如果您正在处理该列表,那就不会太重要,但是,如果您只是想在目录列表中看到这些文件,那就不够好了。我假设前者,否则,这个问题并不属于SO: - )