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

Daw*_*y33 1 bash ubuntu docker

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

sudo docker exec name mv xyz/data/outputs/*.{sbreaks,txt} <>/data/spare
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

mv: cannot stat ‘xyz/data/outputs/*.sbreaks’: No such file or directory
mv: cannot stat ‘xyz/data/outputs/*.txt’: No such file or directory
Run Code Online (Sandbox Code Playgroud)

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

我在这做错了什么?

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

Rob*_*ert 6

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

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

sudo docker exec cypher bash -c 'mv xyz/data/outputs/*.{sbreaks,txt} .......'
Run Code Online (Sandbox Code Playgroud)

当你这样做时docker exec some_program some_param,docker some_program直接搜索并执行它而不做任何额外的事情,只是some_param作为参数传递(在你的情况下是一个星).mv期望真正的文件名,而不是*.