我的问题更多的是关于代码效率和简单性的问题,而不是简单地完成任务。场景是这样的:我想创建一个bash脚本,它使用for循环遍历/ Users,当它在每个用户主目录中时,我希望它看到两个不同的目录是否存在以下样式:
for USER in /Users/*; do
if [ -d "$USER/Library/Caches/com.spotify.Client" ]; then
rm -rf "$USER/Library/Caches/com.spotify.Client"
...但我需要检查多个目录。我如何以最优雅的方式实现这一目标?我想避免使用一系列if语句,但不知道实现此目的的最佳方法。
最后,我想使用find命令查找文件,然后将find的结果(即找到的文件的路径)设置为变量并将其输入到另一个命令中。谢谢。
答案 0 :(得分:2)
根据我对你的要求的理解,我会嵌套for
循环:
subdirs=(
"Library/Caches/com.spotify.client"
"some/other/subdir/"
)
for homedir in /Users/*; do
for subdir in "${subdirs[@]}"; do
dir="$homedir/$subdir"
if [[ -d "$dir" ]]; then
rm -rf "$dir"
fi
done
done
答案 1 :(得分:1)
以下内容以@David Wolever的答案为基础;这些版本更短,让shell在前面做更多的游戏。
内联,单循环版本,不使用中间(数组)变量:
for dir in /Users/*/'Library/Caches/com.spotify.client/' /Users/*/'some/other/subdir/'; do
[[ -d "$dir" ]] && rm -rf "$dir"
done
数组变量版本:
subdirs=(
'Library/Caches/com.spotify.client/'
'some/other/subdir/'
)
for subdir in "${subdirs[@]}"; do
for dir in /Users/*/"$subdir"; do
[[ -d "$dir" ]] && rm -rf "$dir"
done
done