避免捕获相似的文件夹名称



我正在做一个bash脚本,它需要首先生成一个文本文件,它将运行脚本的路径。但是,有一些路径在名称上相似,并且grep命令对我来说不能正常工作。

使用的命令是:

find /base/path/ -type d | grep -i "$1" | grep -i ".root" | grep  -i "Inv" | grep -v "deleted" 

这是我当前的输出:

/base/path/lbasaur/Inv/DATA18/WenuL/group.phys-hdbs.mc16_13TeV.root
/base/path/lbasaur/Inv/DATA18/WenuL/group.phys-hdbs.mc16_13TeV_1.root
/base/path/lbasaur/InvCR/DATA16/Wenu/group.phys-hdbs.mc16_13TeV.root
/base/path/lbasaur/InvCR/DATA16/Wenu/group.phys-hdbs.mc16_13TeV_1.root
/base/path/lbasaur/InvCR/DATA16/WenuB/group.phys-hdbs.mc16_13TeV_2.root
/base/path/lbasaur/InvCR/DATA16/WenuB/group.phys-hdbs.mc16_13TeV_3.root
/base/path/lbasaur/InvCR/DATA16/WenuB/group.phys-hdbs.mc16_13TeV_4.root

但我只想要'Inv'的路径,而不是'InvCR'。因此,当我使用这个大命令时,名称Inv和InvCR会被拾取。我怎样才能修好它?

我明白你的意思了。有几种方法可以从您正在使用的搜索中排除某些名称grep -v "deleted"

使用同样的格式,我们可以排除InvCR:

find /base/path/ -type d | grep -v 'InvCR'

您也可以使用-prune:

find /base/path/ -path '*InvCR*' -prune -o -type d -print

实际上,您只需要使用一个find和一个grep来完成您想要的:

find /base/path/ -path '*deleted*' -prune -o -path '*InvCR*' -prune -o -type d -wholename '*Inv*' -print | grep -P '.*'"$1"'.*[.]root'

注意,这是大小写敏感的,以符合您的原始代码。

相关内容

  • 没有找到相关文章

最新更新