特定の拡張子を持つ1つ以上のファイルが存在することを確認するシェルスクリプトは何ですか?

特定の拡張子を持つ1つ以上のファイルが存在することを確認するシェルスクリプトは何ですか?

特定の拡張子を持つファイルを検索するスクリプトを作成したいと思います。私はこれをたくさんやってきました:

#!/bin/bash
file="/home/Savio/Dsktop/check/*.csv"
file1="/home/Savio/check/*.txt"
if [[ -f "$file" && -f "$file1" ]];
then
    echo " found."
else
    echo "not found."
fi

フォルダにはcheckサブフォルダが含まれています。間違った点がある場合は訂正してください。

ベストアンサー1

再発したくない場合は、

export DIR=/home/Savio/Dsktop/check
if ls ${DIR}/*.txt &>/dev/null && ls ${DIR}/*.csv &>/dev/null
then
    echo "Found."
else
    echo "Not found."
fi

またはperl:

perl -e '
    $DIR="/home/Savio/Dsktop/check";
    @a= glob "${DIR}/*.txt";
    @b= glob "${DIR}/*.csv"; 
    print  @a && @b ? "Found.\n" : "Not found.\n"
' 

もしあなたならする再帰したい場合は、他の回答で提案された解決策が機能します。find最初の一致を見つけて停止すると、より速く実行できるようになります。

export DIR=/home/Savio/Dsktop/check
CSV=$(find "$DIR" -name *.csv|head -n1)
TXT=$(find "$DIR" -name *.txt|head -n1)
[ ! -z "$CSV" ] && [ ! -z "$TXT" ] && echo Found || echo Not found

引用する

おすすめ記事