如何使用模式检查文件是否存在?

发布于 2024-08-28 21:50:48 字数 351 浏览 6 评论 0原文

我有一个包含完整 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

How can I test if file isn’t?

I have a directory with full svn backups named like this:

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

I need to check if a backup file exists using name and revision number only. I tried test but it didn't work:

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

How can I test if file exists?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

一念一轮回 2024-09-04 21:50:48

您可以执行以下操作:

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

You could do:

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

or

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

Edit: Added shopt -s nullglob.

难如初 2024-09-04 21:50:48

只需检查 shell 是否扩展了该模式即可。这适用于 shbash

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

Just check if the shell has expanded the pattern. This works in sh and bash:

pattern="name1.*.r9.bz2"

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

P.S. If the pattern itself can be a valid filename, you can add a -e check:

if [ -e "$pattern" -o "$(echo $pattern)" != "$pattern" ]; then
    echo exists
fi
心如狂蝶 2024-09-04 21:50:48

尤金·伊的答案略有不同:

test "$(echo name1.*.r9.bz2)" != "name1.*.r9.bz2" && echo exists

A slight variation on eugene y's answer:

test "$(echo name1.*.r9.bz2)" != "name1.*.r9.bz2" && echo exists
想挽留 2024-09-04 21:50:48

我会用:

if ls name1.*.r9.bz2 &> /dev/null ; then
  echo exists
fi

I would use:

if ls name1.*.r9.bz2 &> /dev/null ; then
  echo exists
fi
绅刃 2024-09-04 21:50:48

尝试类似的东西

FILES=(`ls name1.*.r9.bz2`)
if [ ${#FILES[@]} -gt 0 ]; then
  echo "Files!"
else
  echo "No Files"
fi

Try something like

FILES=(`ls name1.*.r9.bz2`)
if [ ${#FILES[@]} -gt 0 ]; then
  echo "Files!"
else
  echo "No Files"
fi
蓦然回首 2024-09-04 21:50:48

相关帖子:
检查 shell 脚本中是否存在带有通配符的文件

似乎有一个很好的答案,使用 ls 的返回值。

Related post:
Check if a file exists with wildcard in shell script

It seems to have a good answer, using the return value of ls.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文