与LS和grep特定扩展名的文件列表(List files with certain extensi

2019-07-18 14:17发布

我只是想从当前目录,只输出.MP4 .MP3 .exe文件没有别的需要的档案。 所以我想我可能只是这样做:

ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$

不过没有关系,作为第一个grep的将输出的MP4刚的为此其他2家grep的公司将不会被使用。

有任何想法吗? PS,运行在慢豹这个脚本。

Answer 1:

为什么不:

ls *.{mp3,exe,mp4}

我不知道在那里我学到了 - 但我一直在用这个。



Answer 2:

使用正则表达式find

find . -iregex '.*\.\(mp3\|mp4\|exe\)' -printf '%f\n'

如果你通过管道将文件名:

find . -iregex '.*\.\(mp3\|mp4\|exe\)' -printf '%f\0' | xargs -0 dosomething

这保护包含空格或换行符的文件名。

OS X find只支持交替的时候-E使用(增强)选项。

find -E . -regex '.*\.(mp3|mp4|exe)'


Answer 3:

egrep -扩展的grep -将帮助这里

ls | egrep '\.mp4$|\.mp3$|\.exe$'

应该做的工作。



Answer 4:

最简单的方法是只使用ls

ls *.mp4 *.mp3 *.exe


Answer 5:

以防万一:你为什么不使用find

find -iname '*.mp3' -o -iname '*.exe' -o -iname '*.mp4'


Answer 6:

无需grep的。 壳牌通配符会做的伎俩。

ls *.mp4 *.mp3 *.exe

如果已经运行

shopt -s nullglob

然后无与伦比的水珠将被完全和不除去留在命令行上未膨胀。

如果你想不区分大小写的通配(所以* .MP3将匹配foo.MP3):

shopt -s nocaseglob


Answer 7:

如果你还在寻找一个替代的解决方案:

ls | grep -i -e '\\.tcl$' -e '\\.exe$' -e '\\.mp4$'

随意如果需要添加更多的-e标志。



Answer 8:

对于OSX用户

如果使用ls *.{mp3,exe,mp4} 它会抛出一个错误 ,如果这些扩展的一个一直没有结果。

使用ls *.(mp3|exe|mp4)将返回匹配这些扩展名的所有文件, 即使扩展的一个有0的结果



Answer 9:

ls | grep "\.mp4$
\.mp3$
\.exe$"


Answer 10:

ls -R | findstr ".mp3"

ls -R =>列表子目录递归



Answer 11:

这里是为我工作的一个例子。

find <mainfolder path> -name '*myfiles.java' | xargs -n 1 basename


文章来源: List files with certain extensions with ls and grep