Bash
如何遞歸地查找目錄樹中的所有文件,每個文件的第一行中的第一個字元是空格、製表符或換行符?
例如:
我有兩個文件,a.txt 和 b.txt:
一個.txt
line 1 line 2
b.txt
line 1 line 2
在這種情況下,b.txt 應該出現在列表中,因為第一行的第一個字元是空格、製表符或換行符。
試試這個 :
find . -type f -exec awk 'NR==1 && /^\s/{print FILENAME}' {} \;
或使用bash 4 :
shopt -s globstar awk 'NR==1 && /^\s/{print FILENAME} **/*
與
zsh
:starts_with_space() { local c read -ku0 c < ${1-$REPLY} && [[ $c = [$' \t\n'] ]] } printf '%s\n' **/*(D.L+0+starts_with_space)
D
包括點文件(隱藏文件)並像這樣find
做一樣進入隱藏目錄。.
只有正常文件(如find
’s-type f
)L+0
: 僅非空文件(如find
’s-size +0c
)+starts_with_space
只有那些starts_with_space
返回 true 的。好處之一
find
是它為您提供了一個排序的文件名列表。它只從每個文件中讀取一個字元(在具有多字節字元集的語言環境中可能超過一個字節)。