列出与选择器不匹配的所有文件(使用ls)

Kau*_*kar 12 shell terminal command-line ls sed

可能重复:
在unix/linux shell中进行模式匹配时如何使用反向或负向通配符?

我已经阅读了该man页面ls,我找不到列出所有与文件选择器匹配的选项.你知道怎么做这个操作吗?

例如:假设我的目录是这样的:

> ls
a.txt b.mkv c.txt d.mp3 e.flv
Run Code Online (Sandbox Code Playgroud)

现在我想做一些能做到以下事情的事情

> ls -[SOME_OPTION] *.txt
b.mkv d.mp3 e.flv
Run Code Online (Sandbox Code Playgroud)

有这样的选择吗?

如果没有,有没有办法将输出管道输出ls到另一个功能(可能sed),只显示我想要的功能?

我不知道该怎么做,但我想它会是这样的:

> ls | sed [SOMETHING] 
Run Code Online (Sandbox Code Playgroud)

我真的应该学习如何使用sed,awkgrep,但我一直在坚持理解如何编写正则表达式.我清楚地理解正则表达式的概念,但我对使用不同语法的正则表达式感到困惑.

任何帮助将非常感激!

编辑:

我忘了提,我正在运行的Mac OS X,这样的功能可以是在其他的答案为UNIX/Linux外壳讨论的略有不同(因此我的一些困惑与sed,awkgrep).

小智 45

这可能会对你有所帮助

ls --ignore=*.txt
Run Code Online (Sandbox Code Playgroud)

它不会在您的目录中显示.txt文件.

  • 这对我来说效果很好。您可以将 --ignore 开关串在一起,从而忽略所有 txt 文件、所有以 aj 开头的文件以及名称包含“bar”的所有文件:`ls --ignore=*.txt --ignore=j* --忽略=*栏*` (2认同)
  • 当我在 El Capitan 上使用它时,我得到了非法选项 ls --ignore=*pdf ls:非法选项 -- - 用法:ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [文件 ...] (2认同)
  • 谢谢.实际上这应该是接受的答案!! (2认同)

小智 18

也许这个命令会帮助你

find ./ -maxdepth 1 ! -path "*txt"
Run Code Online (Sandbox Code Playgroud)


nav*_*jan 14

ls|grep -v ".txt"
Run Code Online (Sandbox Code Playgroud)

这有帮助吗?


Tho*_*hor 6

ls只是列出了要使用的参数。在ls看到之前将其*.txt扩展为,请尝试。a.txt c.txtecho *.txt

要使用sed进行操作,您可以从其输入中删除该模式,例如:

ls | sed '/\.txt$/d'
Run Code Online (Sandbox Code Playgroud)

将删除所有以结尾的行.txt

使用bashzsh,可以使shell进行反向扩展,使用bash可以是:

ls !(*.txt)
Run Code Online (Sandbox Code Playgroud)

zsh:

ls *~*.txt
Run Code Online (Sandbox Code Playgroud)

需要注意的是两壳需要扩展水珠选项启用,shopt -s extglob庆典setopt extendedglobzsh中


Ste*_*eve 5

一种使用方法find

find . -maxdepth 1 -type f -not -name "*.txt" -printf "%f\n"
Run Code Online (Sandbox Code Playgroud)