我知道如何使用查找文件
find . -name "file_name"
但是如果我只有一部分路径,比如“folder1/subfolder2/”,我该如何获取包含此部分路径的完整路径?
示例
部分路径:folder1/subfolder2/
期望结果:
/bob/folder1/subfolder2/yo/
/sandy/folder1/subfolder2/hi/
使用-path
选项:
find . -path '*/folder1/subfolder2/*'
find . -path "*folder1/folder2" -prune -exec find {} -type f -name file.txt \;
-prune
后,您不会在目录中进行第一次匹配后递归。*folder1/folder2
进行引用吗? - Rany Albeg Weinls -l /**/folder1/subfolder2/**
如果您不想保持符合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手册。
我想出了这个解决方案,其他的方法对我都没有用,
find1 是一个函数
find1 ()
{
for file in `find -name $1`;
do
full_path=$PWD/$file;
echo $full_path;
done
}
find
实用工具周围(例如,使用alias
)构建一个包装器,因为该实用工具本身和找到的文件都不知道绝对路径。 - arkaschafind
工具不会像你在期望结果中所示那样找到两个文件,除非它们都包含在find
调用指定路径所指向的文件夹内,即这里的.
。这意味着,在你的例子中,.
必须指向/
,否则该结果将不可能出现。而在那种情况下,你所缺少的只是实用程序已经输出的路径中的前导/
。因此,如果你尝试find / -name "file_name"
,你实际上会得到你所需的绝对路径;-) - arkaschafind / -name "folder1" | grep "folder1/folder2"
。 - Niall Cosgrove