【发布时间】:2018-07-10 08:44:47
【问题描述】:
我的目录中充满了扩展名为 .dic 的文件,我需要(递归地)重命名它们以获得扩展名为 .dcm。但是,我需要通过运行一个卷安装在本地文件上的 Docker 来做到这一点。
所以,我提取了 Alpine Docker 映像并开始使用它。由于 Alpine 镜像中没有rename 命令,我使用find、mv 和sed:
1) 从 Alpine 镜像运行一个容器,将我的本地目录挂载到 /tmp,并在容器中启动一个 shell 会话:
docker run -ti -v `pwd`:/tmp alpine /bin/sh
2) 在容器内,运行重命名命令:
find /tmp -name '*.dic' | while read filename; do mv ${filename} $(echo ${filename} | sed -e 's/\.dic$/\.dcm/'); done
这工作正常,但我真正需要做的是启动容器,运行命令,然后退出。所以我尝试了:
docker run -v `pwd`:/tmp alpine /bin/sh -c "find /tmp -name '*.dic' | while read filename; do mv ${filename} $(echo ${filename} | sed -e 's/\.dic$/\.dcm/'); done"
但它不起作用,文件没有重命名,输出是:
BusyBox v1.28.4 (2018-05-30 10:45:57 UTC) multi-call binary.
Usage: mv [-fin] SOURCE DEST
or: mv [-fin] SOURCE... DIRECTORY
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY
-f Don't prompt before overwriting
-i Interactive, prompt before overwrite
-n Don't overwrite an existing file
... 对找到的每个要重命名的文件重复一次。
我做错了什么?
【问题讨论】:
标签: shell docker busybox alpine