gpt4 book ai didi

bash - 检查bash中是否存在满足一定条件的目录

转载 作者:行者123 更新时间:2023-11-29 09:32:31 24 4
gpt4 key购买 nike

我试图让 bash 检查一个目录是否存在,但前提是它满足特定条件。

例如,我想检查是否存在以 pkg_ 开头且后跟任何其他字符的目录。

因此,如果存在名为 pkg_1.0pkg_2.0 的文件夹,bash 仍会捕获它。

目前代码看起来像这样:

if [ -d "~/pkg_*" ];

但每次运行时,无论是否存在任何以 pkg_

开头的目录,它都会返回 false

同时,使用 cd ~/pkg_* 工作得很好,我可以 cd 进入那个目录。

最佳答案

shopt -s nullglob
for path in ~/pkg_*/
do
[do what you want if at least one such directory exists]
break
done

解释:

  • 设置 nullglob 确保 ~/pkg_*/ 在不存在这样的目录时解析为空字符串,这意味着我们不会进入循环。
  • 尾部斜杠确保我们只匹配目录,而不匹配普通文件。
  • 收件人expand tilde and asterisk这些字符需要不加引号。如果quoted这些匹配文件名中的文字波浪号和星号字符,这是可能的,但非常不寻常。
  • break 停止执行循环,因此条件语句只运行一次。

示例 session :

$ cd
$ shopt -s nullglob
$ for path in ~/pkg_*/
> do
> echo 'Found one!'
> break
> done
$ mkdir 'pkg_a'
$ for path in ~/pkg_*/
> do
> echo 'Found one!'
> break
> done
Found one!
$ mkdir 'pkg_b with spaces'
$ for path in ~/pkg_*/
> do
> echo 'Found one!'
> break
> done
Found one!

关于bash - 检查bash中是否存在满足一定条件的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50092970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com