答え1
以下では、globがブロック特殊ファイル、文字特殊ファイル、ディレクトリ、シンボリックリンクなどを含むすべてのファイルと一致するかどうかに関心がないとします。
これは次の理想的なユースケースですfailglob
。
shopt -s failglob
if echo foo* &>/dev/null
then
# files found
else
# no files found
fi
またはファイルが存在する場合は、リストが必要な場合:
shopt -s failglob
files=(foo*)
if [[ "${#files[@]}" -eq 0 ]]
then
# no files found
else
# files found
fi
ファイルが見つからないというエラーが発生した場合は、次のように単純化できます。
set -o errexit
shopt -s failglob
files=(foo*)
# We know that the expansion succeeded if we reach this line
古い回答
ls
これは、スクリプトで(まれに!)正当な用途です。
if ls foo* &>/dev/null
then
…
else
…
fi
または、find foo* -maxdepth 0 -printf ''
。
答え2
に基づいてこの回答、これを使用して、ディレクトリが空のshopt -s nullglob
ときにコメントを返すことができます。
[[ -n "$(shopt -s nullglob; echo foo*)" ]] && echo 'found it!' || echo 'nope!';
答え3
完全性のために、以下はいくつかの使用例ですfind
。
#!/bin/bash
term=$1
if find -maxdepth 1 -type f -name "$term*" -print -quit | grep -q .; then
echo "found"
else
echo "not found"
fi
if [ -n "$(find -maxdepth 1 -type f -name "$term*" -print -quit)" ]; then
echo "found"
else
echo "not found"
fi
そしていくつかのテスト:
user@host > find -type f
./foobar
./bar/foo
./bar/bar
./find_prefixed_files.sh
./ba
user@host > ./find_prefixed_files.sh foo
found
found
user@host > ./find_prefixed_files.sh bar
not found
not found