使用find命令复制结果条目

时间:2018-07-21 14:24:41

标签: bash shell find glob

为什么请使用以下命令获取几乎重复的条目(从起始点开始或没有起始点。)

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

是否有一个find调整项/选项可以消除每个重复项?

2 个答案:

答案 0 :(得分:3)

find命令可以采用零个或多个起点,即将搜索其子目录的文件或目录。起点也可以是外壳程序将扩展的位置,例如*,它会扩展到当前目录中所有非隐藏文件和目录的列表。 Find会顺序地通过其起点,因此如果通过不同起点可访问的文件重叠,它可能会输出重复的文件和/或目录。

最简单的例子是,如果您所在的目录包含文件foo

$ find foo foo

将生成以下输出:

foo
foo

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

您可能只想跑步

$ find . -type f

请注意,如果您在运行find . *时未选择具有-type f条件的常规文件,则可能有一个项目不一定涉及仅会出现一次的隐藏文件或目录:{{1 }}条目。

答案 1 :(得分:0)

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

相关问题