ls | grep. Use a glob or a for loop with a condition to
allow non-alphanumeric filenames.ls /directory | grep mystringor
rm $(ls | grep -v '\.c$')# BASH
shopt -s extglob
rm -- !(*.c)
# POSIX
for f in ./*
do
case $f in
*.c) true;;
*) rm "$f";;
esac
doneParsing 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 for
loop.
ls has 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.