web-dev-qa-db-ja.com

シェルスクリプトで「find」を使用して現在のディレクトリから検索するにはどうすればよいですか?

私はプログラムをこのように見せたい:

read a
if[ find . name $a ]; then
  echo "You found the file"
else "You haven t found the file"
fi
1
Ciobanu Rares

何かが見つかったかどうかにかかわらず、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はこれには過剰です。

5
muru

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で確認できます

2