如何修改第二条指令中的模式,以排除嵌套目录? (这样ls
只返回foo.mp4
,而不返回 的内容bar:
)。
$ ls *
foo.mp4 foo.ogg
bar:
bar.ogg
$ shopt -s extglob
$ ls !(*.ogg)
foo.mp4
bar:
bar.ogg
PS:我用的是OS X。
答案1
使用find
而不是ls
.使用find
您可以排除一个或多个 glob 表达式。对于你的例子(和OSX),你可以这样做
find * -depth 0 -type f ! -name '*.ogg' -ls
它会产生类似的东西ls -l
(仅在文件上,给定-type f
):
66294163 0 -rw-r--r-- 1 tom wheel 0 Sep 9 20:12 foo.mp4
对于 OSX,第一列是 inode 值,然后是链接计数。 find
不提供与以下一样多的列表选项ls
:
$ ls -l
total 0
drwx------ 3 thomas wheel 102 Sep 9 15:33 com.apple.launchd.OFStJ79qtq
drwx------ 3 thomas wheel 102 Sep 9 15:33 com.apple.launchd.VQsV1ae6bI
drwx------ 3 thomas wheel 102 Sep 9 15:33 com.apple.launchd.e6HBMt2vnS
drwx------ 3 thomas wheel 102 Sep 9 15:33 com.apple.launchd.he9U4OAIMI
-rw-r--r-- 1 tom wheel 0 Sep 9 20:12 foo.mp4
-rw-r--r-- 1 tom wheel 0 Sep 9 20:12 foo.ogg
但可能有用。
答案2
我在想什么?
$ ls *.!(ogg)
foo.mp4