Bash rm 命令在内部循环中不起作用
Bash rm command not working from inside loop
在任何给定时间,我的 Linux 服务器将在 /opt
下具有以下目录结构:
/opt/
myapp/
<fileName>-<version>.zip
<fileName>/
derp.txt
staging/
其中 <fileName>-<version>.zip
是名称为 "wildcard" 的 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
。关于我哪里出错有什么想法吗?
您确定 ${file%%-}
中没有缺少 *
吗?照原样,它只删除尾随 -
,如果有的话。
在任何给定时间,我的 Linux 服务器将在 /opt
下具有以下目录结构:
/opt/
myapp/
<fileName>-<version>.zip
<fileName>/
derp.txt
staging/
其中 <fileName>-<version>.zip
是名称为 "wildcard" 的 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
。关于我哪里出错有什么想法吗?
您确定 ${file%%-}
中没有缺少 *
吗?照原样,它只删除尾随 -
,如果有的话。