如果我想从linux / unix中的给定根目录中删除具有给定名称的所有子目录,您会认为您可以发出如下命令:
rm -rf /base-dir-path/*/work
但是,在搜索名为“work”的任何子目录时,上述命令只会深入1个目录。为了实现我想要的目标,我最终用额外的'* /'重复相同的命令,直到rm返回'rm:No match。',EG:
rm -rf /base-dir-path/*/*/*/work
有没有办法让rm
之类的命令在其通配符搜索中匹配/
,这样我只需要发出一个通配符*
字符?
答案 0 :(得分:6)
在tcsh 6.18.00或更新版本:
set globstar
rm -rf /base-path/path/**/work
在bash 4.0或更新版本上:
shopt -s globstar
rm -rf /base-dir/path/**/work
关于ksh:
set -o globstar # or set -G
rm -rf /base-dir/path/**/work
在zsh上:
rm -rf /base-dir/path/**/work
或者,find
符合2006年版的POSIX:
find /base-dir/path -type d -name work -exec rm -rf -- '{}' +
如果您没有find
-exec ... {} +
,那么您可能也没有xargs -0
,并且需要以低效的方式执行此操作安全:
find /base-dir/path -type d -name work -exec rm -rf -- '{}' ';'