Bash

在目前目錄中查找與模式不匹配的文件

  • September 10, 2016

如何修改第二條指令中的模式,以排除嵌套目錄?(這樣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。

我在想什麼?!

$ ls *.!(ogg)
foo.mp4

使用find而不是ls. find您可以排除一個或多個全域表達式。對於您的範例(和 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

但可能很有用。

引用自:https://unix.stackexchange.com/questions/308971