代码之家  ›  专栏  ›  技术社区  ›  methuselah

循环遍历目录中的前12个文件,并在找到文件时中断

  •  0
  • methuselah  · 技术社区  · 5 年前

    在Bash中,在目录的前12个文件夹中循环搜索文件的最佳方法是什么,如果找到了该文件,则从两个循环中退出。

    这是我迄今为止的尝试。它没有:

    • 将搜索范围限制为前12个文件夹
    • 找到文件时中断嵌套for循环

    我该怎么解决这个问题?

    #!/bin/bash
    
    value="test.txt"
    file_found = false
    
    cd /backup/logs || exit 1
    ls -1tr | head -n -12 | while read -r folder; do
       cd /backup/logs/${folder}
       ls -1tr | while read -r file; do
          if [[ ${file} == ${value} ]]; then
             file_found=true
             echo "file found in ${folder}"
             break
          fi
       done
       if [[ ${file_found} == true ]]; then
          break
       fi
    done      
    
    2 回复  |  直到 5 年前
        1
  •  2
  •   choroba    5 年前

    使用 head -n 12 -n -12 :列出除最后12个文件外的所有文件。

    break 2 打破深度为2的嵌套循环。

    使用 ls -d */

        2
  •  2
  •   chepner    5 年前

    使用 for 循环,不是循环 while "$value" 存在。

    i=0
    for folder in /backup/logs/*
        if [ "$i" = 12 ]; then break; fi
        cd /backup/logs/"$folder"
        if [ -f "$value" ]; then
            echo "file found in $folder"
            break
        fi
        i=$((i+1))
    done
    
    推荐文章