I use the following pipe as variable in a script:
match=$( ls | grep -i "$search")
this is then used in an if statement:
if [ "$match" ]; then
echo "matches found"
else
echo "no matches found"
fi
what would be an alternative if I did not want to use find? ShellCheck recommends:
ls /directory/target_file_pattern
but I do not get the syntax right to get the same result. also I want no output when there are no matches for the if statement to work.
If you just want to tell if there exist any matches with bash you could use the builtin compgen like so:
if compgen -G 'glob_pattern_like_your_grep' >/dev/null; then
echo "matches found"
else
echo "no matches found"
fi
if you want to operate on the files that are matched, find is usually the right tool for the job:
find . -name 'glob_pattern_like_your_grep' -exec 'your command to operate on each file that matches'
the key though is that you have to use glob patterns, not regex type patterns.
If your find supports it, you might be able to match a regex like
find . -regex 'pattern'
and use that in either the if or with -exec
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With