【问题标题】:Find a store in a variable the full path of a folder if exist in BASH如果 BASH 中存在文件夹的完整路径,则在变量中查找存储
【发布时间】:2016-11-14 15:01:03
【问题描述】:

我需要获取与特定名称匹配的文件夹的完整路径(如果存在)。总有一个文件夹与名称匹配。 例如:代码必须找到具有这些可能名称的文件夹(如果存在):

/home/user/myfolder
/home/user/myfolder_aaa
/home/user/myfolder_bbb
/home/user/myfolder_ccc

不能匹配任何其他“类似”文件夹,例如

/home/user/myfolder_xxx

如果文件夹存在,我需要将完整路径保存在变量中 像这样的东西也匹配不需要的情况,并且不会重试完整路径:

path=`ls /home/user/myfolder*`

【问题讨论】:

    标签: bash path find


    【解决方案1】:

    如果可能性很小,只有一个目标目录,那么这就足够了:

    top_level='myfolder'
    
    for end in '' '_aaa' '_bbb' '_ccc'
    do
        name=$top_level$end
        if [[ -d $name ]]
        then
            var="$name"
            break
        fi
    done
    
    echo "$var found"
    

    【讨论】:

      【解决方案2】:

      您可以将find 与正则表达式一起使用:

      find ./home/user -regextype posix-extended -type f -regex '.*/myfolder(_(aaa|bbb|ccc))?$'
      

      将结果存储在数组中(因为这些文件夹名称中似乎没有空格):

      arr=()
      while IFS= read -r f; do
         arr+=( "$f" )
      done < <(find /home/user -regextype posix-extended -type f -regex '.*/myfolder(_(aaa|bbb|ccc))?$' -print0)
      
      # check array contents
      declare -p arr
      

      【讨论】:

      • 使用这个命令我认为 myfolder_yyy 匹配,这是不正确的。我只需要匹配这 4 个案例 -> myfolder、myfolder_aaa、myfolder_bbb、myfolder_ccc
      • 更新后的答案也将匹配myfolder_aaa_aaa
      • @tripleee;你是对的。我有一个拼写错误* 而不是预期的?(现在编辑)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-27
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      相关资源
      最近更新 更多