List files with certain extensions with ls and grep
Use regular expressions with find
:
find . -iregex '.*\.\(mp3\|mp4\|exe\)' -printf '%f\n'
If you're piping the filenames:
find . -iregex '.*\.\(mp3\|mp4\|exe\)' -printf '%f\0' | xargs -0 dosomething
This protects filenames that contain spaces or newlines.
OS X find
only supports alternation when the -E
(enhanced) option is used.
find -E . -regex '.*\.(mp3|mp4|exe)'
Why not:
ls *.{mp3,exe,mp4}
I'm not sure where I learned it - but I've been using this.
egrep
-- extended grep -- will help here
ls | egrep '\.mp4$|\.mp3$|\.exe$'
should do the job.