3

This works just fine

if [[ -e img.png ]]
then
     echo "exist"
else
     echo "doesn't exist"
fi

but what if I know that there might be imgage with name img but I do not know if the file is .jpg , .gif , .jpeg , .tff and so on.

I do not care what is the extension I just want to know if there is a file with name 'img'

How can I do this ?

4

5 に答える 5

2

次のスクリプトを使用できます

files=`ls img.* 2>/dev/null`
if [ "$files" -a ${#files[@]} ]; then
    echo "exist"
else
    echo "doesn't exist"
fi

このスニペットではls img.*、名前がパターンに一致する現在の作業ディレクトリ内のすべてのファイルを一覧表示するために使用しますimg.*。結果は という名前の配列に格納されfilesます。次に、配列のサイズをチェックして、必要なファイルが存在するかどうかを判断します。

配列の長さを取得する方法については、これを参照してください。

于 2012-11-06T08:28:27.740 に答える
2

できるよ:

files=$(ls img.* 2> /dev/null | wc -l)
if [ "$files" != "0" ]
then
echo "exist"
else
echo "doesn't exist"
fi
于 2012-11-06T08:28:48.180 に答える
0

外部コマンドなし:

$ for i in img.*
> do
>  [ -f $i ] && echo exist || echo not exist
>  break
> done

ファイルが存在するかどうかを確認します。現在の印刷が存在する場合は存在せず、存在しない場合はすぐに中断します。「-f」チェックが必要なのは、ファイルが存在しない場合でも、ループはiを「img。*」として1回実行するためです。

于 2012-11-06T09:01:54.517 に答える
0
shopt -s nullglob
files=( img.* )
if (( ${#files[@]} == 0 )); then
    echo "there are no 'img' files"
fi

then を使用しない場合nullglob、そのようなファイルがない場合、配列には 1 つの要素、リテラル文字列 "img.*" が含まれます。

于 2012-11-06T11:26:55.843 に答える
0

このようなものが仕事をするはずです:

if [[ $(ls img.*) ]]; then
  echo "file exist";
else
  echo "file does not exist";
fi

bash のパターン マッチングを確認することをお勧めします: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_04_03.html

于 2012-11-06T08:45:24.690 に答える