私はプログラムをこのように見せたい:
read a
if[ find . name $a ]; then
echo "You found the file"
else "You haven t found the file"
fi
何かが見つかったかどうかにかかわらず、find
は常にtrueを返します。 grep
を使用して、find
が何かを見つけたかどうかを判断できます。
read -r a
if find . -maxdepth 1 -name "$a" -print -quit | grep -q .
then
echo "You found the file"
else
echo "You haven't found the file"
fi
Eliahが指摘したように、最初の一致(-print -quit
)の後に終了すると、パフォーマンスが向上するはずです。 -maxdepth 1
を使用して、結果を現在のディレクトリに制限します-しかし、find
はこれには過剰です。
find
コマンドを使用する必要がないhaveの場合、test
コマンド(またはその短い形式の[
...]
)を使用する方が簡単です。 test
を使用すると、e
スイッチは探していることを実行します。
#!/bin/bash
read -r a
if [[ -e $a ]]; then
echo "You found the file"
else
echo "You haven't found the file"
fi
ただし、test
は現在のディレクトリ内のファイルのみを検索し、サブディレクトリ内では検索しないことに注意してください(リマインダーについてはEliahKaganに感謝します)。
test
の概要は、 Bash Hackers Wikiで確認できます