Shell-Script
如何列印出符合某些“查找”條件的所有文件的第一行?
我想列印出
.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
選項使用空字節作為參數分隔符,而不是預設的換行符。