由于我缺乏 Bash 知识,我带着一个小问题来找你。我有一个包含 41 个文件夹的“Apps”目录。每个文件夹中都有一个css
包含glue1.css 文件的子目录。我的目标是通过 bash 循环删除该 css 文件,但我需要豁免两个文件夹:ad
and glue-resources
.
我需要豁免ad
文件夹,因为没有 css 文件。我想防止执行时出现以下错误:
rm: ad/css/glue1.css: No such file or directory
考虑这个假设的目录(为简洁起见,缺少 41 个文件夹):
Apps
ad
css
(empty)
glue-resources
css
glue1.css (keep this file!)
profile
css
glue1.css (remove this file!)
...
这是我到目前为止的代码。它应该调用rm
如果父目录路径不等于,则在glue1.css文件上glue-resources/css/
or ad/css/
.
for dir in **/css/; do
if [[ "${dir}" != 'glue-resources/css/' || "${dir}" != 'ad/css/' ]]; then
rm "${dir}"glue1.css
fi
done
上面的代码结果不起作用。我得到相同的“没有这样的文件或目录”错误和glue1.css文件glue-resources/css
已被删除。我不太确定为什么它不起作用——我在某处读到如果你使用[[
and ]]
您可以组合多个条件。
我认为问题是我不明白 bash 中的多个条件是如何工作的。以下版本的代码可以工作。
for dir in **/css/; do
if [[ "${dir}" != 'glue-resources/css/' ]]; then
rm "${dir}"glue1.css
fi
done
for dir in **/css/; do
if [[ "${dir}" != 'ad/css/' ]]; then
rm "${dir}"glue1.css
fi
done
我尝试向 if 语句添加多个条件失败。