bash - 'mv' 命令抛出错误但在 docker 中执行正常

标签 bash ubuntu docker

当我执行以下命令时(将所有扩展名为 .txt.sbreaks 的文件移动到另一个文件夹):

sudo docker exec name mv xyz/data/outputs/*.{sbreaks,txt} <>/data/spare

我收到以下错误:

mv: cannot stat ‘xyz/data/outputs/*.sbreaks’: No such file or directory
mv: cannot stat ‘xyz/data/outputs/*.txt’: No such file or directory

但是,当我通过 sudo docker exec -it name bash 进入 docker 并执行相同的命令时:mv xyz/data/outputs/*.{sbreaks,txt} xyz/data/spare,它执行得很好。

我在这里做错了什么?

PS:本地和Docker容器都是ubuntu环境

最佳答案

那是因为 * 是由 shell 程序(即 bash)展开的。 (嘘,这是典型的面试问题)。

因此,将您的命令传递给 shell,让它为您启动 mv:

sudo docker exec cypher bash -c 'mv xyz/data/outputs/*.{sbreaks,txt} .......'

当你执行docker exec some_program some_param时,docker会搜索some_program并直接执行它,不需要做任何额外的事情,只需将some_param作为一个参数(在你的例子中是一颗星)。 mv 需要真实的文件名,而不是 *

关于bash - 'mv' 命令抛出错误但在 docker 中执行正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44390360/

相关文章:

php - Docker容器本地连接MySQL数据库->重定向到另一个容器

bash - 将 key=value 对解析为变量

c++ - 如何查看 CXX 和 CXXFLAG 的值

docker - 如何在 ipython 中渲染 matplotlib 图

docker - 镜像注册表在 docker 中如何工作?

ubuntu - Ubuntu 中的 Sun JDK 6 安装失败,出现 "ELF: not found"

bash - 在文件夹 shell 脚本中搜索和替换字符串

bash - 在 bash 中,如何获取 set -x 的当前状态?

bash - 观察字符串的命令行

ubuntu - 在 Ubuntu 上通过 Ansible 将 Java Jar 作为服务运行