4

次のような名前の完全な svn バックアップを含むディレクトリがあります。

name1.20100412.r9.bz2
name1.20100413.r10.bz2
name2.20100411.r101.bz2
name3.20100412.r102.bz2
...

名前とリビジョン番号のみを使用して、バックアップ ファイルが存在するかどうかを確認する必要があります。私は試しtestましたが、うまくいきませんでした:

if [ -e name1.*.r9.bz2 ]; then echo exists; fi
[: too many arguments

ファイルが存在するかどうかをテストするにはどうすればよいですか?

4

6 に答える 6

3

あなたができること:

shopt -s nullglob
set -- name1.*.r9.bz2
if [ -n "$1" ]; then echo exists; fi

また

pattern="name1.*.r9.bz2"
if [ "$(echo $pattern)" != "$pattern" ]; then echo exists; fi

編集:追加shopt -s nullglob

于 2010-11-04T00:30:50.567 に答える
2

eugene yの答えのわずかなバリエーション:

test "$(echo name1.*.r9.bz2)" != "name1.*.r9.bz2" && echo exists
于 2012-09-18T08:55:10.417 に答える
1

シェルがパターンを拡張したかどうかを確認してください。これはで動作しshますbash

pattern="name1.*.r9.bz2"

if [ "$(echo $pattern)" != "$pattern" ]; then
    echo exists
fi

PSパターン自体が有効なファイル名である可能性がある場合は、次の-eチェックを追加できます。

if [ -e "$pattern" -o "$(echo $pattern)" != "$pattern" ]; then
    echo exists
fi
于 2010-04-13T15:32:15.283 に答える
0

私は使うだろう:

if ls name1.*.r9.bz2 &> /dev/null ; then
  echo exists
fi
于 2012-09-29T08:04:00.540 に答える
-1

次のようなものを試してください

FILES=(`ls name1.*.r9.bz2`)
if [ ${#FILES[@]} -gt 0 ]; then
  echo "Files!"
else
  echo "No Files"
fi
于 2010-04-13T15:54:03.360 に答える