ls -f的意义是什么(或者为什么会这样挂?)


9

我有一个包含约100,000个文件的目录。ls -f挂了一分钟以上。我运行了strace,立即开始看到getdents,因此ls显然正在读取目录。我还看到了对brk的大量调用,因此ls显然正在缓冲内存中的内容。我编写了一个简单的程序,该程序调用readdir并输出文件名,并且它会立即响应。但是ls -f不提供输出。是什么赋予了?我以为-f的全部要点是它使ls除了readdir外什么也不做。有没有一种可移植的,可靠的方式来列出目录的内容?(请注意,这是Linux上gn​​u的coreutils中的ls。)

-编辑-

有一个别名,但是“ / bin / ls -1f> / dev / null”需要8到15秒,“ / bin / ls -1fx> / dev / null”需要4到11秒,但是程序很简单readdir只需要0.0111秒。我应该怎么做才能使牛不吮吸?

Answers:


7

这样做的目的-f是尝试避免统计每个文件条目,并避免在显示任何文件之前先读取它们。这是一个“元”选项,仅禁用其他选项。

因此,是的,它应该可以完成您的期望。我无法回答为什么不是这样,但是我想您可能有一个shell别名或其他可以在命令中插入其他选项的东西。与-f禁用功能相比,重新启用功能可能会被认为是“更具体的”,因此请优先考虑。


2
啊 ls(){/ bin / ls -FB $ @; 愚蠢的启动脚本。
William Pursell '02

1
嗯。我未设置功能,即使运行/ bin / ls,我仍然看到相同的行为。
William Pursell

执行/ bin / ls -f -1(这是减一,而不是减-ell)。由于某种原因,我正在使用RHEL框上的/ bin / ls格式化列中的文件名。
Bruce Ediger '02

0

在coreutils 7.0中添加了优化(commit 8d974b00fbbc2025de63e1e6d54827648fefa1c4):

2008-08-01  Kamil Dudka  <kdudka@redhat.com>
    ls -U1 now uses constant memory
    When printing one name per line and not sorting, ls now uses
    constant memory per directory, no matter how many files are in
    the directory.
    * ls.c (print_dir): Print each file name immediately, when possible.
    * NEWS: Mention the improvement.

首先想到的是您正在运行旧版本的coreutils。您需要升级。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.