在当前目录中查找与模式不匹配的文件

在当前目录中查找与模式不匹配的文件

如何修改第二条指令中的模式,以排除嵌套目录? (这样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

相关内容