使用ls仅显示特定数量的项目

时间:2017-05-07 01:43:37

标签: unix

我正在尝试在C中获得一个简单的myhead命令,以显示目录中前五个.HTML文件的前10行。我被建议使用ls与我的myhead命令一起执行此操作。我的主要问题是让ls只显示5个.html文件,而不是全部列出。

我在想这样的事情

ls *.html -n 5 > myhead

但是,这不存在。有任何想法吗?我们只打算使用lsmyhead

2 个答案:

答案 0 :(得分:1)

如果我理解正确,你已经编写了一个C程序myhead,它打印出传入的十行文件。

你绝对不想这样做

ls *.html -n 5 > myhead

这将在当前目录中覆盖或创建新文件myhead

实现此目标所需的关键是命令行管道。这允许一个命令的stdout成为下一个命令的stdin。您还需要command substitution将一个命令的stdout输出或管道命令用作另一个命令的文本。历史上这已经使用反引号`ls`完成,或者在bash中你可以使用$(ls)作为示例来获取ls列表并将其用作另一个命令的文本。

鉴于您对标准ls文件列表顺序没有问题,您可以执行此操作以获取前5个.html文件:

ls *.html | head -n 5

我不知道myhead是什么或它是如何工作的,因为它没有在问题中解释。你说它显示传入其中的文件的前十行。可能会有一些它做到这一点。 我将为每种可能性提供一个解决方案(假设您正在使用bash):

  1. 一次取一个文件,作为参数传递
  2. for f in $(ls *.html | head -n 5) ; do myhead $f ; done

    1. 一次获取多个文件,以多个参数传递
    2. myhead $(ls *.html | head -n 5)

      1. 获取通过 stdin
      2. 传入的文件的内容

        for f in $(ls *.html | head -n 5) ; do cat $f | myhead ; done

答案 1 :(得分:0)

使用标准的Unix head命令,您可以执行以下操作:

head -n 10 $(ls | head -n 5)

首先,您应该完全按照shell中所示运行此命令,以验证它是否有效。接下来,使用myhead命令代替head进行尝试。