gpt4 book ai didi

bash 测试一组目录是否存在

转载 作者:行者123 更新时间:2023-12-04 06:52:26 27 4
gpt4 key购买 nike

将文档存储在包含“日常”目录的文件系统中,例如20050610. 在 bash 脚本中,我想列出这些目录中一个月的文件。所以我正在运行一个查找命令 find <path>/200506* -type f >> jun2005.lst .想在执行 find 命令之前检查这组目录是否不是空集。但是,如果我使用 if[ -d 200506* ]我收到“太多的争论错误。我该如何解决这个问题?

最佳答案

您的“参数过多”错误并非来自文件数量过多且超出命令行参数限制。它来自有超过一两个与 glob 匹配的目录。你的glob“200506*”扩展为“20050601 20050602 20050603...”和-d测试只需要一个参数。

$ mkdir test
$ cd test
$ mkdir a1
$ [ -d a* ] # no error
$ mkdir a2
$ [ -d a* ]
-bash: [: a1: binary operator expected
$ mkdir a3
$ [ -d a* ]
-bash: [: too many arguments

答案来自 zed_0xff 走在正确的轨道上,但我会使用不同的方法:
shopt -s nullglob
path='/path/to/dirs'
glob='200506*/'
outfile='jun2005.lst'
dirs=("$path"/$glob) # dirs is an array available to be iterated over if needed
if (( ${#dirs[@]} > 0 ))
then
echo "directories found"
# append may not be necessary here
find "$path"/$glob -type f >> "$outfile"
fi
"$path"/$glob中引号的位置与 "$path/$glob"对这项工作至关重要。

编辑:

更正以排除与 glob 匹配的文件(因此只包含目录)并处理非常不寻常的情况,即字面上命名为 glob ("200506*") 的目录。

关于bash 测试一组目录是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2931932/

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