使用“find”过滤bash中的多个匹配项

时间:2011-10-27 22:56:42

标签: regex bash find

  

可能重复:
  Unix “find” command usage

这是针对bash安装脚本的。脚本foo.sh将“DIRECTORY”作为参数。比如,有一个目录/ TEST / TEST_1A / TEST_2A / TEST_3和另一个目录/ TEST / TEST_1B / TEST_2B / TEST_3。

脚本:foo.sh简介。

DIR=`find $HOME -type d -name $1 | head 1'
if [ DIR is set to a directory ]
then
rm -rf $DIR

用法:foo.sh TEST_3

现在从脚本中,只能删除/ TEST / TEST_1A / TEST_2A / TEST_3。要删除/ TEST / TEST_1B / TEST_2B / TEST_3,我需要在find命令中使用reg exp来微调删除以解决目录冲突。

修改上述脚本的查找部分,如下所示

DIR='find $HOME -type d -regexp $1 | head 1

新用法:foo.sh TEST_2B / TEST_3

但是“找到”命令FAILS将DIR设置为/ TEST / TEST_1B / TEST_2B / TEST_3,而是返回空&因此DIR是空的,我永远不会删除/ TEST / TEST_1B / TEST_2B / TEST_3

如何更改脚本,以便find可以在JUST上执行目录名称,也可以在没有问题的情况下执行目录路径。事实上,一些用户可能会将部分目录路径作为“foo.sh”的参数。我希望“foo.sh”能够工作,即使在这种情况下也是如此

1 个答案:

答案 0 :(得分:0)

如果我这样做,我会把它全部链接起来:

find $HOME -type d -name $1 | grep '\bTEST_.*?A\b' | xargs rm -rf

只有当它们位于包含“TEST_A”

的路径上时,才会删除所有目录