我想打印出每个.txt
超过 100 字节的文件的第一行。到目前为止,我已经设法收集符合条件的文件,但我不知道如何打印文件的第一行文本。
find -size +100c -name "*.txt"
或者我完全走错了路?
答案1
您需要head -n 1
在每个文件上运行:
find . -size +100c -name '*.txt' -execdir head -n 1 {} \;
或者,如果您find
不支持-execdir
,
find . -size +100c -name '*.txt' -exec head -n 1 {} \;
如果您的head
版本支持-q
,或者您不关心在一次调用中处理多个文件时为每个文件显示的标头,则可以使用以下命令使这两种变体稍微更有效
… -exec head -q -n 1 {} +
(看竞争条件与-exec
了解的好处-execdir
。)
答案2
您经常会看到xargs
建议处理以下输出find
find -size +100c -name "*.txt" | xargs head -n 1
xargs 获取列表文件名由 find 生成,并将文件名作为给定命令的参数提供。它智能地这样做以避免“参数太多”或“命令太长”错误。
head -q -n1
如果您不希望在给定多个文件名时提供额外的信息头,您可能需要使用。
由于文件名几乎可以包含任何字符(包括换行符),因此这是对 find|xargs 的更安全的调用:
find -size +100c -name "*.txt" -print0 | xargs -0 head -n 1
- 该
-print0
指令输出由空字节分隔的文件名,而不是默认的换行符 - xargs
-0
选项使用空字节作为参数分隔符而不是默认的换行符。