【问题标题】:bash create file in directory, only part of directory name is knownbash 在目录中创建文件,只有部分目录名是已知的
【发布时间】:2016-10-24 15:59:55
【问题描述】:

我有一堆使用约定 prefix.suffix 命名的目录。 prefix 是数字,suffix 是任意长度的字母数字。
mkdir 123.abcdef

prefix 总是唯一的,但我并不总是知道 bash 脚本运行时的 suffix 是什么。 在我的脚本中,我怎样才能让 bash 只知道 前缀 写入给定目录?
以下方法不起作用,但我尝试了:
echo "itworks" > 123*/results.text

【问题讨论】:

    标签: bash automation directory glob


    【解决方案1】:

    glob 目录部分以在 glob 上循环:

    shopt -s nullglob
    
    for dir in 123*/; do
        echo "itworks" > "${dir}results.text"
    done
    

    您还可以强制检查是否存在唯一目录匹配:

    shopt -s nullglob
    
    dirs=( 123*/ )
    if (( ${#dirs[@]} == 0 )); then
        echo >&2 "No dirs found!"
        exit 1
    elif (( ${#dirs[@]} > 1 )); then
        echo >&2 "More than one dir found!"
        exit 1
    fi
    
    # Here you're good
    echo "itworks" > "${dirs[0]}results.txt"
    

    【讨论】:

      【解决方案2】:

      您可以使用“ls -d”强制使用通配符评估目录名称

      echo "itworks" > $(ls -d 123*)/results.txt
      

      【讨论】:

      • ls 对于这个任务真的没用。 echo "itworks" > "$(printf '%s' 123*/)results.txt" 会稍微好一点。
      【解决方案3】:
      prefix='yourprefix' && find . -maxdepth 1 -type d -name "$prefix*" \
      -exec echo "Hello" {}/results.txt \;
      

      应该这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-25
        • 2012-09-29
        • 2020-07-20
        • 2019-02-05
        • 1970-01-01
        • 1970-01-01
        • 2018-03-21
        • 1970-01-01
        相关资源
        最近更新 更多