当我执行以下命令(将所有带有.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环境
答案 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
需要真实的文件名,而不是*
。