• ベストアンサー

Bash スクリプトでファイルの検出方法を教えてください。

ファイルやディレクトリが無いこと(消去できたこと)を、検出したいと思います。 試しに、次のプログラムを作ってみました。 f_chk() { if [ -f "$1" ]; then echo $1 "ファイルはあった → NG" return 1 else echo $1 "ファイルは無かった → OK" return 0 fi } f_chk "/mnt/hoge/*.INF" exit ------------------------------- "if [ -f "$1" ];"でファイルの有無を判定させようとすると、明確にファイル名を指定しなければ成りません。 今、ファイル名の指定を「*.INF」とすると、正しい判定をしません。 これに変わる方法を教えてください。

みんなが選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8467/18126)
回答No.1

普通にlsで表示させてみて判断すれば良いんじゃないの? ls /mnt/hoge/*.INF 2> /dev/null | wc -l

xcode_15
質問者

お礼

ファイルを判定する量が多いため、「普通にlsで表示させてみて判断する」方法では、抜け落ちてしまいます。 ご回答、有難う御座いました。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

f_chk() { if ls "$1" >/dev/null 2>&1 then echo "$1 ファイルはあった" ; return 1 else echo "$1 ファイルはなかった" ; return 0 fi }

xcode_15
質問者

お礼

ご回答を戴きまして、誠に有難う御座います。 この方法で、実験をしましたところ、 /mnt/hoge/A.INF /mnt/hoge/B.INF /mnt/hoge/C.INF のファイルがあったとしても、「/mnt/hoge/*.INF ファイルはなかった」と判定されます。 明確に「f_chk "/mnt/hoge/A.INF"」とすれば、「/mnt/hoge/*.INF ファイルはあった」と判定されます。 このことから、if文で判定する時に誤判定をされてしまうようです。

xcode_15
質問者

補足

解決しました。 以下のコードで、思い通りの動作しました。 f_chk() { ans=$(ls $1 2> /dev/null | wc -l) echo $ans if [ $ans -ne 0 ] then echo "$1 ファイルはあった" ; return 1 else echo "$1 ファイルはなかった" ; return 0 fi } f_chk "/mnt/hoge/*.INF" f_chk "/mnt/hoge/A.INF" f_chk "/mnt/hoge2/*" 結果 3 /mnt/hoge/*.INF ファイルはあった 1 /mnt/hoge/A.INF ファイルはあった 0 /mnt/hoge2/* ファイルはなかった

関連するQ&A