查找返回相同路径两次,但被截断

查找返回相同路径两次,但被截断

我正在运行这个find命令:

find $HOME * -depth -type d -iname *bowtie* | grep "bowtie*-*1[^2]"

我的预期输出是:

/home/user/Documents/scripts/bowtie1.3.0-linux-x86_64
/home/user/Documents/scripts/bowtie-1.3.0-linux-x86_64

但它返回这个:

/home/user/Documents/scripts/bowtie1.3.0-linux-x86_64
/home/user/Documents/scripts/bowtie-1.3.0-linux-x86_64
Documents/scripts/bowtie1.3.0-linux-x86_64
Documents/scripts/bowtie-1.3.0-linux-x86_64

如何修改find命令以仅显示前两个结果?

答案1

您正在find使用多个相同的搜索路径运行。您正在使用$HOME以及*生成的任何名称。显然,它*扩展到了一些目录,其中包括您正在查找的名称。

建议:

find "$HOME" -type d -name 'bowtie*1.[!2]*'

上述内容还可以通过更有创意地grep使用测试来消除您的困扰。-name在调用之前,您需要引用不应相对于当前目录展开的任何模式find

该模式匹配以 开头的名称bowtie,然后包含1.n,其中n不是2。代替[!2],您可以使用[13-9]强制匹配除 之外的整数2,而不仅仅是除 之外的任何字符2

答案2

那是因为您将两个参数传递给find

  • 您的$HOME目录
  • *它由 shell 扩展到当前目录中的文件和目录的完整列表,该目录可能是您的$HOME.

因此,find将首先搜索$HOME并返回类似的内容/home/user/foo,然后它将搜索您提供给它的文件和目录列表,因为它们是由 shell 扩展的,所以它们是路径相对的到您当前的目录,因此没有前导/home/user,因此它返回类似foo.

相关内容