gpt4 book ai didi

Shell脚本来检查文件是否存在

转载 作者:行者123 更新时间:2023-12-04 05:24:58 26 4
gpt4 key购买 nike

我正在尝试编写一个简单的脚本,它会告诉我 $Temp 中是否存在以字符串“Test”开头的文件名。

例如,我有这些文件

Test1989.txt
Test1990.txt
Test1991.txt

然后我只想回显找到一个文件。

例如,这样的事情:
file="home/edward/bank1/fiche/Test*"
if test -s "$file"
then
echo "found one"
else
echo "found none"
fi

但这不起作用。

最佳答案

一种方法:

(
shopt -s nullglob
files=(/home/edward/bank1/fiche/Test*)
if [[ "${#files[@]}" -gt 0 ]] ; then
echo found one
else
echo found none
fi
)

解释:
  • shopt -s nullglob会引起/home/edward/bank1/fiche/Test*如果没有文件匹配该模式,则扩展为空。 (没有它,它将保持原样。)
  • ( ... )设置子shell,防止shopt -s nullglob从“逃避”。
  • files=(/home/edward/bank1/fiche/Test*)将文件列表放入名为 files 的数组中. (请注意,这仅在子 shell 内;files 在子 shell 退出后将无法访问。)
  • "${#files[@]}"是此数组中的元素数。


  • 编辑地址 后续问题(“如果我还需要检查这些文件中是否包含数据并且不是零字节文件,该怎么办”):

    对于这个版本,我们需要使用 -s (正如你在你的问题中所做的那样),它还测试文件的存在,所以使用 shopt -s nullglob 毫无意义。不再:如果没有文件与模式匹配,则 -s在模式上将是假的。所以,我们可以这样写:
    (
    found_nonempty=''
    for file in /home/edward/bank1/fiche/Test* ; do
    if [[ -s "$file" ]] ; then
    found_nonempty=1
    fi
    done
    if [[ "$found_nonempty" ]] ; then
    echo found one
    else
    echo found none
    fi
    )

    (这里的 ( ... ) 是为了防止 filefound_file “逃逸”。)

    关于Shell脚本来检查文件是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15305556/

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