Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使“unzip”尝试解压缩文件(如果存在),如果没有,则不会失败_Bash_Shell_Unix - Fatal编程技术网

Bash 使“unzip”尝试解压缩文件(如果存在),如果没有,则不会失败

Bash 使“unzip”尝试解压缩文件(如果存在),如果没有,则不会失败,bash,shell,unix,Bash,Shell,Unix,如何使解压忽略未找到的文件 当我运行unzip myArchive.zip config/*并且config/*与存档中的任何文件都不匹配时,我得到了一个返回代码11 如果文件存在,是否可以进行解压尝试解压而不失败? 如果是,怎么做 我在解压手册中找不到任何选项将其转换为“如果失败,请闭嘴,兄弟!”模式 当然,我可以做一些类似于解压myArchive.zip config/*| true的事情,但对我来说,它看起来真的很难看 谢谢你的帮助 编辑:已将其标识为重复。可能是。另一个答案非常有用,但要

如何使解压忽略未找到的文件

当我运行
unzip myArchive.zip config/*
并且
config/*
与存档中的任何文件都不匹配时,我得到了一个返回代码11

如果文件存在,是否可以进行
解压
尝试解压而不失败? 如果是,怎么做

我在解压手册中找不到任何选项将其转换为“如果失败,请闭嘴,兄弟!”模式

当然,我可以做一些类似于
解压myArchive.zip config/*| true
的事情,但对我来说,它看起来真的很难看

谢谢你的帮助


编辑:已将其标识为重复。可能是。另一个答案非常有用,但要使命令忽略所有错误。我期望有一个选项/技巧,简单地跳过未找到的文件,并让命令在其他错误情况下继续失败(例如,如果存档不存在)

删除错误消息、错误退出代码和任何消息:

unzip -qq myArchive.zip config/* 2> /dev/null || true

由于此退出状态仅限于此单一错误情况,您可以:

unzip myArchive.zip config/* || \
( e=$? && if [ $e -ne 11 ]; then exit $e; fi )

修改后的问题(静默特定错误消息和退出代码)的可能重复项比建议的重复项更一般、更有趣。该回答解决了OP的原始Q,但没有回答OP的修改Q,这更难:仅消除特定错误的结果,在保留所有其他错误的同时,这似乎是可行的,但并不能消除发送到STDOUT和STDERR的文本警告。(以特定的方式这样做似乎很麻烦,可以
grep-v
查找可能的错误字符串,但可能没有任何通用的解决方案。)你是对的。我可以提出另一种基于临时文件的解决方案来记录输出,有选择地打印和/或删除,但恐怕这会有点过火。让我们保持简单。特别是对于像
zip/unzip
这样的老狗。我不关心输出,返回码才是真正的问题。无论如何,这是一种优雅的方法。我终于用-t“测试”了文件夹的解压,用“grep OK”获得了当前文件列表,并在第二次解压。它工作,但我可能会改变它为您的解决方案。。。谢谢