【发布时间】:2017-04-19 03:33:11
【问题描述】:
我是 UNIX 的初学者。我试图创建一个 bash 脚本,列出指定目录中每个文件的“头”,但我尝试了所有方法,但它似乎不起作用。我该怎么做。下面是我目前在我的脚本中的代码。我打算稍后在脚本中添加更多内容,但首先需要这样做。
numberOfLines=$1
directoryName=$2
head $numberOfLines $directoryName
【问题讨论】:
我是 UNIX 的初学者。我试图创建一个 bash 脚本,列出指定目录中每个文件的“头”,但我尝试了所有方法,但它似乎不起作用。我该怎么做。下面是我目前在我的脚本中的代码。我打算稍后在脚本中添加更多内容,但首先需要这样做。
numberOfLines=$1
directoryName=$2
head $numberOfLines $directoryName
【问题讨论】:
试试这个:
head $directoryName/* -n $numberOfLines
【讨论】:
您以错误的方式调用 head 命令。 将您的代码与manual page 进行比较。
【讨论】:
我会使用find 命令:
find "$directory" -maxdepth 1 -type f -exec head -n "$numberOfLines" {} \;
这确保了head 将只对文件而不是目录执行。
【讨论】:
Head 处理文件(或文件组),而不是目录,因此您需要调整 directoryName 变量,以便告诉 shell 解释器您的意思是“此目录中的每个文件”而不是目录。
最简单的方法是将“/*”添加到目录名称,将第三行更改为:
head $numberOfLines ${directoryName}/*
例子:
myshell:tmp gdalton$ ./script.sh -2 hello
==> hello/file1 <==
file 1
==> hello/file2 <==
file 2
file 2
请注意,由于 head 命令的语法,您需要像我在示例中所做的那样使用破折号调用您的第一个参数。您可以使用我为修复您的代码所做的更改作为跳转点轻松地在您的代码中修复此问题......我强烈建议您检查手册页的 head 以便您可以弄清楚如何构建您的 shell 命令;它们通常包含这些命令的丰富选项。
man head
祝你好运。
【讨论】: