在任何给定时间,我的Linux服务器将在/opt
下具有以下目录结构:
/opt/
myapp/
<fileName>-<version>.zip
<fileName>/
derp.txt
staging/
其中<fileName>-<version>.zip
是带有“通配符”名称的ZIP文件。有一刻它可能是fizz-1.0.1.zip
,在这种情况下文件系统看起来像:
/opt/
myapp/
fizz-1.0.1.zip
fizz/
derp.txt
staging/
然后一小时后,文件系统可能如下所示:
/opt/
myapp/
buzz-2.11.15.zip
buzz/
derp.txt
staging/
我正在尝试编写一个清理bash命令,它将扫描/opt/myapp
目录中的ZIP文件(*.zip
),重命名它们并将它们移动到/opt/staging
,以及删除derp.txt
文件。对于重命名,我只想删除连字符和版本号,例如将fizz-1.0.1.zip
转换为fizz.zip
。例如,在文件系统看起来像这样运行脚本:
/opt/
myapp/
fizz-1.0.1.zip
fizz/
derp.txt
staging/
应该导致:
/opt/
myapp/
fizz/
staging/
fizz.zip
我保证在任何给定时间内/opt/myapp
内只有1个ZIP文件。我最好的尝试是:
for file in *.zip; do
[[ -e $file ]] || continue
sudo mv "$file" /opt/staging/"${file%%-*}.zip"
sudo rm -rf /opt/${file%%-}/derp.txt
done
执行ZIP文件的重命名和移动,但不删除derp.txt
。关于我哪里出错的任何想法?
答案 0 :(得分:3)
您确定*
中某处${file%%-}
遗失了吗?按原样,它只删除尾随的-
,如果有的话。