如何删除zsh中不包含给定文件的文件夹?

如何删除zsh中不包含给定文件的文件夹?,zsh,Zsh,我正在寻找一种方法来删除给定路径中不包含给定文件的所有文件夹。例如,使用以下目录结构: mkdir -p 1 2 3 4 touch 1/{a,b,c} 2/{b,d} 3/{a,c} 4/{a,c,d} ls * # directory_structure # 1: # a b c # 2: # b d # 3: # a c # 4: # a c d 我想删除文件夹3和4,因为它们不包含文件b。在zsh中最好的方法是什么?免责声明:我不是一个笨重的zsh用户,在zsh脚本中

我正在寻找一种方法来删除给定路径中不包含给定文件的所有文件夹。例如,使用以下目录结构:

mkdir -p 1 2 3 4
touch 1/{a,b,c} 2/{b,d} 3/{a,c} 4/{a,c,d}
ls *
# directory_structure
# 1:
# a  b  c

# 2:
# b  d

# 3:
# a  c

# 4:
# a  c  d

我想删除文件夹3和4,因为它们不包含文件b。在zsh中最好的方法是什么?

免责声明:我不是一个笨重的zsh用户,在zsh脚本中一定有更好的方法

for dir in 1 2 3 4 ; do
  [ -e $dir/b ] || rm -r $dir
done

免责声明:我不是一个笨重的zsh用户,在zsh脚本中一定有更好的方法

for dir in 1 2 3 4 ; do
  [ -e $dir/b ] || rm -r $dir
done

因为zsh非常棒,所以您可以执行一个命令来测试glob中的每个文件。这是您想要的*e:[\!-e'$REPLY'/b]::


因为zsh非常棒,所以您可以执行一个命令来测试glob中的每个文件。这是您想要的*e:[\!-e'$REPLY'/b]::


太棒了,我不知道环球资格赛的事。注意,您引用了冒号之间的命令以避免转义扩展:*e:“[!-e$REPLY/b]”:太棒了,我不知道那个glob限定符。请注意,您引用冒号之间的命令以避免转义扩展:*e:“[!-e$REPLY/b]”: