web-dev-qa-db-ja.com

ディレクトリに複数のファイルが存在するかどうかを確認します

kshAIX上)のディレクトリに存在する複数のファイルを見つける方法

私は以下のものを試しています:

if [ $# -lt 1 ];then
    echo "Please enter the path"
    exit
fi
path=$1
if [ [ ! f $path/cc*.csv ] && [ ! f $path/cc*.rpt ] && [ ! f $path/*.xls ] ];then
    echo "All required files are not present\n"
fi

check[6]: !: unknown test operator // check is my file nameのようなエラーが発生します。

私のスクリプトの何が問題になっていますか。誰かが私を助けてくれませんか?.

2
Aravind

test -fは、ワイルドカードから展開された複数のファイルに対しては機能しません。代わりに、nullリダイレクトされたlsを含むShell関数を使用することもできます。

present() {
        ls "$@" >/dev/null 2>&1
}

if [ $# -lt 1 ]; then
    echo "Please enter the path"
    exit
fi
path=$1
if ! present $path/cc*.csv && ! present $path/cc*.rpt && ! present $path/*.xls; then
    echo "All required files are not present\n"
fi

ところで&&を使用しても問題ないですか?この場合、not present内にcc*.csvまたはcc*.rptまたはcc*.xlsという名前のファイルがない場合にのみ$pathを取得します。

1
yaegashi
if [ [ ! f $path/cc*.csv ] && [ ! f $path/cc*.rpt ] && [ ! f $path/*.xls ] ];then
    echo "All required files are not present\n" fi

check[6]: !:不明なテストオペレーター

オペランド 'f'は不明なオペランド-> '-f '

if [ [ ! -f $path/cc*.csv ] && [ ! -f $path/cc*.rpt ] && [ ! -f $path/*.xls ] ];then
    echo "All required files are not present\n"
fi

あなたの場合、あなたのallファイルは、エコーする前に欠落している必要があります...もちろん、それは目標によって異なります。

AIXのkshでチェックアウトできません。

1
kris