- ベストアンサー
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」とすると、正しい判定をしません。 これに変わる方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
みんなが選んだベストアンサー
普通にlsで表示させてみて判断すれば良いんじゃないの? ls /mnt/hoge/*.INF 2> /dev/null | wc -l
その他の回答 (1)
- notnot
- ベストアンサー率47% (4900/10358)
f_chk() { if ls "$1" >/dev/null 2>&1 then echo "$1 ファイルはあった" ; return 1 else echo "$1 ファイルはなかった" ; return 0 fi }
お礼
ご回答を戴きまして、誠に有難う御座います。 この方法で、実験をしましたところ、 /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文で判定する時に誤判定をされてしまうようです。
補足
解決しました。 以下のコードで、思い通りの動作しました。 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/* ファイルはなかった
お礼
ファイルを判定する量が多いため、「普通にlsで表示させてみて判断する」方法では、抜け落ちてしまいます。 ご回答、有難う御座いました。