当我执行以下命令时(将所有扩展名为 .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/