我只是想从当前目录,只输出.MP4 .MP3 .exe文件没有别的需要的档案。 所以我想我可能只是这样做:
ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$
不过没有关系,作为第一个grep的将输出的MP4刚的为此其他2家grep的公司将不会被使用。
有任何想法吗? PS,运行在慢豹这个脚本。
我只是想从当前目录,只输出.MP4 .MP3 .exe文件没有别的需要的档案。 所以我想我可能只是这样做:
ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$
不过没有关系,作为第一个grep的将输出的MP4刚的为此其他2家grep的公司将不会被使用。
有任何想法吗? PS,运行在慢豹这个脚本。
为什么不:
ls *.{mp3,exe,mp4}
我不知道在那里我学到了 - 但我一直在用这个。
使用正则表达式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)'
egrep
-扩展的grep -将帮助这里
ls | egrep '\.mp4$|\.mp3$|\.exe$'
应该做的工作。
最简单的方法是只使用ls
ls *.mp4 *.mp3 *.exe
以防万一:你为什么不使用find
?
find -iname '*.mp3' -o -iname '*.exe' -o -iname '*.mp4'
无需grep的。 壳牌通配符会做的伎俩。
ls *.mp4 *.mp3 *.exe
如果已经运行
shopt -s nullglob
然后无与伦比的水珠将被完全和不除去留在命令行上未膨胀。
如果你想不区分大小写的通配(所以* .MP3将匹配foo.MP3):
shopt -s nocaseglob
如果你还在寻找一个替代的解决方案:
ls | grep -i -e '\\.tcl$' -e '\\.exe$' -e '\\.mp4$'
随意如果需要添加更多的-e标志。
对于OSX用户 :
如果使用ls *.{mp3,exe,mp4}
它会抛出一个错误 ,如果这些扩展的一个一直没有结果。
使用ls *.(mp3|exe|mp4)
将返回匹配这些扩展名的所有文件, 即使扩展的一个有0的结果 。
ls | grep "\.mp4$
\.mp3$
\.exe$"
ls -R | findstr ".mp3"
ls -R
=>列表子目录递归
这里是为我工作的一个例子。
find <mainfolder path> -name '*myfiles.java' | xargs -n 1 basename