在 Linux 上,使用 LS 的 FIND 命令在没有选项 -d 的情况下未显示正确的结果

On Linux, FIND command with LS not showing proper result without option -d

我需要检查当前文件夹中最后一天创建的所有文件,该文件夹有数百万个文件。

如果我使用以下命令,则会显示正确的 80 或 90 个文件。这是正确的。

find . -ctime -1 -exec ls -ld {} \;

但是如果我将 ls 选项更改为 rt 或 l 或任何其他没有 d 的选项。它显示错误的结果。它显示了数千个文件。我最终不得不按控制 C 来停止输出。以下都是错误的永无止境的结果。

find . -ctime -1 -exec ls -l {} \;
find . -ctime -1 -exec ls -t {} \;
find . -ctime -1 -exec ls -rt {} \;
find . -ctime -1 -exec ls  {} \;

谁能告诉我这是怎么回事。为什么它只适用于 d。 不过以下作品

find . -ctime -1 -exec ls -lrtd  {} \;

如果你这样做 ls /tmp,你就会明白为什么。它为您提供 /tmp 目录中的所有文件,而不是目录本身的详细信息。

您可以 'fix' 通过使用 -dls 显示目录而不是其中的文件(如您所见)或使用 find -type f 将您的搜索限制为仅常规文件。这是假设它只是您感兴趣的常规文件,层次结构中还存在诸如 FIFO 管道和设备之类的东西,但是 -type 上还有其他变体,如果需要它们会选择这些变体(请参阅 find 手册页了解详细信息)。