![[重複]ディレクトリに複数のファイルがあることを確認してください。](https://linux33.com/image/71822/%5B%E9%87%8D%E8%A4%87%5D%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AB%E8%A4%87%E6%95%B0%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8C%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82.png)
ディレクトリ内の複数のファイルを見つける方法ksh
(パート1 AIX
)
次のいずれかを試しています。
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 filename などのエラーが発生します。
私のスクリプトに何の問題がありますか?誰でもこの問題を解決するのに役立ちますか?
答え1
test -f
ワイルドカードで拡張された複数のファイルでは機能しません。代わりに、null-redirectedでシェル関数を使用できますls
。
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
答え2
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
あなたの場合みんなあなたの内容を反映するには、ファイルが欠落している必要があります。これはもちろん、あなたの目標によって異なります。
AIX では ksh とは見えません。