如果没有文件匹配通配符,带通配符的 mv 将失败并返回 "No such file or directory"

mv with wildcard fails with "No such file or directory" if no files match wildcard

我是运行以下命令:

mv logs/*.log logs/bak/

现在,当我的日志文件夹包含匹配 *.log 的文件时,它工作正常。

但是,如果没有匹配的文件,它会抛出错误

mv: cannot stat 'logs/*.log': No such file or directory

我怎样才能完成这项工作?

编辑 我试图在不执行任何操作的情况下以零状态代码退出,以便我可以在我的构建过程中使用它

使用find代替mv

例如:

find logs -maxdepth 1 -type f -exec mv '{}' logs/bak  \;

... 当您尝试使用此命令时,请在其前面加上 echo and/or use verbose:

find logs -maxdepth 1 -type f -exec echo mv '{}' logs/bak  \;
find logs -maxdepth 1 -type f -exec mv -v '{}' logs/bak  \;

注意选项:

-maxdepth 1 : 防止递归到子目录

-type f : 只考虑常规文件

要仅匹配以 .log 结尾的文件,您可以添加选项:

-name *.log

OP 编辑​​

所以,最后的命令是:

find logs -maxdepth 1 -type f -name \*.log -exec mv -v '{}' logs/bak  \;