使用 find 命令复制结果条目

Duplicate result entries with find command

为什么我使用以下命令得到几乎重复的条目(以或不以起点开始。):

find .  * -type f | grep '082235'
./Takeout-1/Google Photos/2017-12-07/20171207_082235.jpg.json
./Takeout-2/Google Photos/2017-12-07/20171207_082235.jpg
Takeout-1/Google Photos/2017-12-07/20171207_082235.jpg.json
Takeout-2/Google Photos/2017-12-07/20171207_082235.jpg

是否有 tweak/option 的 find 来删除每个重复项?

问题是您对 find . * 的使用。这实际上是说要搜索当前目录(这是递归的,因此包括其中的所有内容),然后还指定再次单独搜索其中的所有内容。请改用 find .find *。 (注意后者会跳过隐藏目录中的文件。)

find命令可以取零个或多个起点,即要搜索其子目录的文件或目录。起始点也可以是 shell 将扩展的 globs,例如 *,它扩展为当前目录中所有非隐藏文件和目录的列表。 Find 依次通过其起点,因此如果通过不同起点可到达的文件重叠,它可能会输出重复的文件 and/or 目录。

最简单的示例是,如果您位于包含文件 foo

的目录中
$ find foo foo

将生成以下输出:

foo
foo

通过 运行ning 命令 find . * 作为起点:首先,当前目录,.;其次,该目录中的所有非隐藏文件。这自然会创建重复的输出:每个以 . 作为起点的常规文件不是顶层的隐藏文件(即 ./.bar 文件)并且不包含在隐藏目录中顶级(即 ./.baz/ 目录)也将出现在列表的第二部分,没有前导 ./.

你可能只想运行

$ find . -type f

请注意,如果您 运行宁 find . * 不选择具有 -type f 条件的常规文件,将会有一个不一定涉及隐藏文件或目录的项目只会出现一次:.条目。