给定部分路径,找到完整路径

18

我知道如何使用查找文件

find . -name "file_name"

但是如果我只有一部分路径,比如“folder1/subfolder2/”,我该如何获取包含此部分路径的完整路径?

示例

部分路径:folder1/subfolder2/

期望结果:

/bob/folder1/subfolder2/yo/
/sandy/folder1/subfolder2/hi/

你需要在find实用工具周围(例如,使用alias)构建一个包装器,因为该实用工具本身和找到的文件都不知道绝对路径。 - arkascha
1
对于你的例子,需要说明的是:find 工具不会像你在期望结果中所示那样找到两个文件,除非它们都包含在 find 调用指定路径所指向的文件夹内,即这里的 .。这意味着,在你的例子中,. 必须指向 /,否则该结果将不可能出现。而在那种情况下,你所缺少的只是实用程序已经输出的路径中的前导 /。因此,如果你尝试 find / -name "file_name",你实际上会得到你所需的绝对路径;-) - arkascha
1
一个快速的解决方法是使用 find / -name "folder1" | grep "folder1/folder2" - Niall Cosgrove
5个回答

27

使用-path选项:

find . -path '*/folder1/subfolder2/*'

4
您可以按以下方式进行操作:
find . -path "*folder1/folder2" -prune -exec find {} -type f -name file.txt \;

使用-prune后,您不会在目录中进行第一次匹配后递归。

你有意放弃对 *folder1/folder2 进行引用吗? - Rany Albeg Wein

2
这个对我有用(使用bash)。
ls -l /**/folder1/subfolder2/**

0

如果您不想保持符合posix标准,至少在Linux上,您也可以使用-regex(和-regextype)选项来实现此目的。

例如:

find folder/ -regextype posix-extended -regex "(.*/)?deer/(.*/)?beer"

将匹配

folder/deer/beer
folder/deer/dir/forest/beer/
folder/forest/deer/dir/forest/beer/

等等。

有关详细信息,请参阅Linux手册。


0

我想出了这个解决方案,其他的方法对我都没有用,

find1 是一个函数

find1 ()
{
    for file in `find -name $1`;
    do
        full_path=$PWD/$file;
        echo $full_path;
    done
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接