rm -rf / base-dir-path / * / work与/ base-dir-path / * / * / work不同

时间:2015-07-30 17:36:42

标签: shell unix wildcard solaris tcsh

如果我想从linux / unix中的给定根目录中删除具有给定名称的所有子目录,您会认为您可以发出如下命令:

rm -rf /base-dir-path/*/work 

但是,在搜索名为“work”的任何子目录时,上述命令只会深入1个目录。为了实现我想要的目标,我最终用额外的'* /'重复相同的命令,直到rm返回'rm:No match。',EG:

rm -rf /base-dir-path/*/*/*/work

有没有办法让rm之类的命令在其通配符搜索中匹配/,这样我只需要发出一个通配符*字符?

1 个答案:

答案 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 -- '{}' ';'