最近,有人要求我检查为什么某些find
命令会跳过隐藏文件夹,我发现问题出在路径末尾有通配符,如下所示:
find /path_to_folder/*
上面命令的输出仅显示常规文件和文件夹,跳过隐藏文件夹
但如果我们愿意的话
find /path_to_folder/
我们可以拥有所有文件和文件夹(包括隐藏的)。
有人可以帮助我理解这种行为或指出在哪里查看以获取更多详细信息吗?我尝试在手册中搜索find
但没有得到明确的答案。
答案1
该实用程序采用一个或多个搜索路径。在使用诸如和 之find
类的谓词指定进一步测试之前,这些是该实用程序的第一个参数。-name
-type
当您使用 时find /path_to_folder/*
,shell 会将通配模式扩展/path_to_folder/*
到与其匹配的路径名列表。其中每一个都将由 进行搜索find
。*
默认情况下,模式末尾的 不会扩展到隐藏名称。该find
实用程序将遍历每个搜索路径并查找其下的所有名称,包括隐藏名称,但它不会搜索/path_to_folder
自身,因为您没有为其提供该路径名。
当您使用 时find /path_to_folder/
,您将指定find
一个路径名作为搜索路径。该find
实用程序将遍历/path_to_folder
目录及其子目录,包括隐藏名称。在这种情况下,它将直接找到隐藏的名称,/path_to_folder
因为您将此路径名指定为搜索路径。
概括:
/path_to_folder/*
是一种通配模式,shell 将扩展为 下所有匹配的非隐藏名称的列表/path_to_folder
。下面的这些名称/path_to_folder
将用作find
搜索路径,但列表不包括/path_to_folder
其本身。使用
/path_to_folder/
作为单个路径名,find
将搜索该目录并查找其中或之下的所有内容。