' MV'命令抛出错误但在docker

时间:2017-06-06 12:43:55

标签: 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环境

1 个答案:

答案 0 :(得分:6)

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

所以将命令传递给shell并让它为你启动mv

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

当您执行docker exec some_program some_param时,泊坞工搜索some_program并直接执行它而不做任何额外的操作,只需将some_param作为参数传递(在您的情况下为星号)。 mv需要真实的文件名,而不是*