如果没有文件匹配通配符,带通配符的 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 \;
我是运行以下命令:
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 \;