Bash脚本:我正在通过ls -1检查文件,如果没有文件我也想循环

Bash脚本:我正在通过ls -1检查文件,如果没有文件我也想循环

我需要检查目录中是否有 12 个文件。当只有一个文件时,此循环工作正常,并且将使用“sleep 300”循环 4 次。但是当根本没有文件时,它会失败并且不会循环。我还能添加什么来使其循环,即使根本没有文件。简而言之,我想检查20分钟的文件传送时间。

retry() {
attempt_num=0
    while [[ `ls -1 *File*${JulianDate}.* | wc -l` -lt 12 ]]
    do

答案1

不解析ls输出。将文件列表读入数组,并检查数组的大小。

retry() {
    while true; do
        files=( *File*${JulianDate}.* )
        (( ${#files[@]} >= 12 )) && break
        sleep for some amount
    done
    do stuff with 12 or more files ...
}

答案2

waitforfiles () {
    n=0
    while [ "$n" -lt 4 ]; do
        set -- *File*$JulianDate.*
        [ "$#" -ge 12 ] && return 0
        sleep 300
        n=$(( n + 1 ))
    done

    return 1
}

if ! waitforfiles; then
    echo 'Not enough files arrived in time.' >&2
    exit 1
fi

# Do something here.

不要解析 的输出ls,它仅供您解析在。相反,使用 shell 来匹配要匹配的名称,然后计算匹配的文件数。 shell 或多或少免费地为您提供此功能(与调用外部实用程序ls和相比wc)。

上面的函数将休眠 300 秒,然后重试,直到模式匹配 12 个或更多文件名,或者直到循环运行四次。它返回成功(零)或失败(非零),具体取决于文件是否及时到达。

有关的:

相关内容