有没有办法让“mv”默默地失败?

有没有办法让“mv”默默地失败?

mv foo* ~/bar/如果没有匹配的文件,则类似命令会在 stderr 中生成此消息foo*

mv: cannot stat `foo*': No such file or directory

但是,在我正在处理的脚本中,这种情况完全没问题,并且我想从日志中忽略该消息。

mv即使没有任何东西移动,有什么好的方法可以告诉你保持安静吗?

答案1

您在找这个吗?

$ mv  file dir/
mv: cannot stat ‘file’: No such file or directory
$ mv  file dir/ 2>/dev/null
# <---- Silent ----->

答案2

实际上,我认为静音mv不是一个好方法(请记住,它可能还会向您报告其他可能感兴趣的事情......例如,missing ~/bar)。仅当您的 glob 表达式不返回结果时,您才需要将其静音。事实上,根本不执行它。

[ -n "$(shopt -s nullglob; echo foo*)" ] && mv foo* ~/bar/

看起来不太吸引人,并且仅适用于bash.

或者

[ 'foo*' = "$(echo foo*)" ] || mv foo* ~/bar/

除非你在集合bashnullglob。不过,您要付出 3 倍重复 glob 模式的代价。

答案3

find . -maxdepth 1 -name 'foo*' -type f -print0 | xargs -0r mv -t ~/bar/

— GNUmv有很好的“目的地优先”选项 ( -t),并且xargs如果根本没有输入,可以跳过运行其命令 ( -r)。使用-print0-0相应地确保当文件名包含空格和其他“有趣”的东西时不会出现混乱。

答案4

这可能不是最好的,但您可以使用find命令检查文件夹是否为空:

find "foo*" -type f -exec mv {} ~/bar/ \;

相关内容