ls | grep. Use a glob or a for loop with a condition to allow non-alphanumeric filenames.
ls /directory | grep mystring
rm $(ls | grep -v '\.c$')
# BASH shopt -s extglob rm -- !(*.c) # POSIX for f in ./* do case $f in ) true;; *.c*) rm "$f";; esac done
Parsing ls is generally a bad idea because the output is fragile and human readable. To better handle non-alphanumeric filenames, use a glob. If you need more advanced matching than a glob can provide, use a
lshas sorting options that are tricky to get right with other commands. If a specific order of files is needed, ls <sort options> | grep might be the best alternative.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.