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/
除非你在集合bash
中nullglob
。不过,您要付出 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/ \;