gpt4 book ai didi

bash - 如果没有文件与 glob 匹配,则防止 "mv"命令引发错误。例如“mv *.json/dir/

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

我想将在 jenkins 作业中创建的所有 JSON 文件移动到不同的文件夹。

作业可能没有创建任何 json 文件。在这种情况下,mv 命令会引发错误,因此作业会失败。

如果找不到文件,如何防止 mv 命令引发错误?

最佳答案

欢迎来到 SO。

为什么你不想要这个错误?

如果您只是不想看到错误,那么您总是可以使用2>/dev/null 将其丢弃,但请不要这样做去做。并非每个错误都是您所期望的,这是一个调试噩梦。您可以使用 2>$logpath 将其写入日志,然后构建逻辑来读取它以确保它没问题,并相应地忽略或响应 --

mv *.json /dir/ 2>$someLog
executeMyLogParsingFunction # verify expected err is the ONLY err

如果是因为您设置了 set -etrap,并且您知道 mv 失败(这可能不是因为没有文件!),那么你可以使用这个技巧 -

mv *.json /dir/ || echo "(Error ok if no files found)"

mv *.json /dir/ ||: # : is a no-op synonym for "true" that returns 0

参见 https://www.gnu.org/software/bash/manual/html_node/Conditional-Constructs.html

(如果失败仅仅是因为 mv 作为最后一个命令返回了一个非零值,您也可以添加一个显式的 exit 0,但也不要这样做- 解决实际问题而不是修补症状。任何这些其他解决方案都应该解决这个问题,但我想指出除非有 set -etrap捕获错误,它不应该导致脚本失败,除非它是最后一个命令。)

更好的做法是专门处理您预期的问题,而不禁用对其他问题的错误处理。

shopt -s nullglob # globs with no match do not eval to the glob as a string
for f in *.json; do mv "$f" /dir/; done # no match means no loop entry

比较https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html
或者,如果您不想使用 shopt

for f in *.json; do [[ -e "$f" ]] && mv "$f" /dir/; done

请注意,我只是在测试是否存在,所以这将包括任何匹配项,包括目录、符号链接(symbolic link)、命名管道...您可能需要 [[ -f "$f"]] && mv "$f "/dir/ 代替。

比较https://www.gnu.org/software/bash/manual/html_node/Bash-Conditional-Expressions.html

关于bash - 如果没有文件与 glob 匹配,则防止 "mv"命令引发错误。例如“mv *.json/dir/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63670916/

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