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

use*_*694 2 unix shell solaris wildcard tcsh

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

rm -rf /base-dir-path/*/work 
Run Code Online (Sandbox Code Playgroud)

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

rm -rf /base-dir-path/*/*/*/work
Run Code Online (Sandbox Code Playgroud)

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

Cha*_*ffy 6

在tcsh 6.18.00或更新版本:

set globstar
rm -rf /base-path/path/**/work
Run Code Online (Sandbox Code Playgroud)

在bash 4.0或更新版本:

shopt -s globstar
rm -rf /base-dir/path/**/work
Run Code Online (Sandbox Code Playgroud)

在ksh上:

set -o globstar # or set -G
rm -rf /base-dir/path/**/work
Run Code Online (Sandbox Code Playgroud)

在zsh上:

rm -rf /base-dir/path/**/work
Run Code Online (Sandbox Code Playgroud)

或者,find符合2006年版POSIX:

find /base-dir/path -type d -name work -exec rm -rf -- '{}' +
Run Code Online (Sandbox Code Playgroud)

如果你没有findwith -exec ... {} +,那么你可能没有xargs -0,并且需要以低效的方式做到安全:

find /base-dir/path -type d -name work -exec rm -rf -- '{}' ';'
Run Code Online (Sandbox Code Playgroud)