Shell-Script

如何列印出符合某些“查找”條件的所有文件的第一行?

  • October 21, 2022

我想列印出.txt超過 100 個字節的每個文件的第一行。到目前為止,我已經設法收集了符合條件的文件,但我不知道如何列印出文件的第一行文本。

find -size +100c -name "*.txt"

還是我完全走錯了路?

您需要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 {} +

你會經常看到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選項使用空字節作為參數分隔符,而不是預設的換行符。

引用自:https://unix.stackexchange.com/questions/721907