如何通过文件名称和部分路径搜索文件?

如何通过文件名称和部分路径搜索文件?

通常我有一个文件名和它的部分路径,例如“content/docs/file.xml”。

有没有一种简单的方法来搜索该文件,而无需手动将其名称分成几部分来分别提供目录名和文件名?

find如果能以这样的方式工作就太好了,这样我就可以运行了find content/docs/file.xml,但不幸的是,它不能。

答案1

传入*通配符来表示匹配任何事物。您还需要转义 s *,例如:

find . -path \*content/docs/file.xml

或者将模式括在引号中,例如:

find . -path "*content/docs/file.xml"

正如手册页所描述的那样:

$ find .-name *.c-print

查找:路径必须在表达式之前

发生这种情况的原因是 *.c 已被 shell 扩展,导致 find 实际上收到如下命令行:

查找 . -name bigram.c code.c frcode.clocate.c-print

该命令当然不会起作用。您不应该这样做,而应该将模式括在引号中或转义通配符:

$ 查找。-名称 \*.c-打印

答案2

find 也有一个-path(或等效但不太便携的-wholename)选项find $top_dir -wholename *string*

find /usr -path *in/abiw*

>/usr/bin/abiword

答案3

find . -type f | grep "content/docs/file.xml"

要不就

locate content/docs/file.xml

答案4

例如,使用星号/通配符(*)在某个位置搜索文件: dir=“/apps/*/instance01/" 您可以使用 find ${dir} -name “*.jks”。将所有文件放在一个数组中,如下所示:

arr=(`find ${dir} -name “*.jks"`)

如果您想获取具有其他扩展名的文件,请使用“或”,如下所示:

-name "*.keystore" -o -name "*.jks" -o -name “*.p12" 因为-name只接受单个字符串所以使用“或”。

最后把所有内容放入数组中,如下所示:

arr=(`find ${dir} -name "*.keystore" -o -name "*.jks" -o -name "*.p12"`)

如果您有完整路径而不是部分路径,则将它们放入数组中要容易得多,如下所示:

arr=(“/Users/ajay/Documents/keystore_and_p12files/"*.{keystore,p12,jks})

相关内容