【问题标题】:find full path given partial path找到给定部分路径的完整路径
【发布时间】:2016-08-19 08:12:03
【问题描述】:

我知道如何使用

find . -name "file_name"

但是如果给我一个路径的一部分,比如“folder1/subfolder2/”,我如何获得包含这个部分路径的所有完整路径?

示例

部分路径:folder1/subfolder2/

想要的结果:

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

【问题讨论】:

  • 您必须围绕find 实用程序构建一个包装器(所以可能是alias),因为实用程序本身和找到的文件都不知道绝对路径。
  • 对您的示例的说明:find 实用程序永远不会按照您在所需结果中的建议找到两个文件,except 如果它们都包含在文件夹中find 的调用中指定的路径指向,所以这里是.。这意味着,在您的示例中,. 必须指向/,否则该结果是不可能的。而在那种的情况下,你所缺少的只是实用程序已经输出的路径中的前导/。所以如果你尝试find / -name "file_name",你实际上会得到你想要的绝对路径;-)
  • 一个快速的解决方法是find / -name "folder1" | grep "folder1/folder2"

标签: shell unix find


【解决方案1】:

如果您不想保持 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 man 了解详情。

【讨论】:

    【解决方案2】:

    我想出了这个,其他解决方案对我不起作用,

    find1 是一个函数

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

    【讨论】:

      【解决方案3】:

      使用-path 选项:

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

      【讨论】:

        【解决方案4】:

        你可以这样做:

        find . -path "*folder1/folder2" -prune -exec find {} -type f -name file.txt \;
        

        -prune 在目录中第一次匹配后不会递归

        【讨论】:

        • 你是不是故意不引用*folder1/folder2
        【解决方案5】:

        这个对我有用(使用 bash)

        ls -l /**/folder1/subfolder2/**
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-21
          相关资源
          最近更新 更多