rm -rf /base-dir-path/*/work 与 /base-dir-path/*/*/work 不同
rm -rf /base-dir-path/*/work isn't the same as /base-dir-path/*/*/work
如果我想从 linux/unix 中的给定根目录中删除具有给定名称的所有子目录,您会认为您可以发出如下命令:
rm -rf /base-dir-path/*/work
但是,上面的命令在搜索任何名为 'work' 的子目录时只会深入 1 个目录。为了实现我想要的,我最终用一个额外的'*/'重复相同的命令,直到 rm returns 'rm: No match.', EG:
rm -rf /base-dir-path/*/*/*/work
有没有办法让 rm
之类的命令在其通配符搜索中匹配 /
,这样我只需要发出一个通配符 *
字符?
在 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
符合 POSIX 的 2006 年修订版:
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 -- '{}' ';'
如果我想从 linux/unix 中的给定根目录中删除具有给定名称的所有子目录,您会认为您可以发出如下命令:
rm -rf /base-dir-path/*/work
但是,上面的命令在搜索任何名为 'work' 的子目录时只会深入 1 个目录。为了实现我想要的,我最终用一个额外的'*/'重复相同的命令,直到 rm returns 'rm: No match.', EG:
rm -rf /base-dir-path/*/*/*/work
有没有办法让 rm
之类的命令在其通配符搜索中匹配 /
,这样我只需要发出一个通配符 *
字符?
在 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
符合 POSIX 的 2006 年修订版:
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 -- '{}' ';'