Bash

如何遞歸地查找目錄樹中的所有文件,每個文件的第一行中的第一個字元是空格、製表符或換行符?

  • February 27, 2018

例如:

我有兩個文件,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是它為您提供了一個排序的文件名列表。它只從每個文件中讀取一個字元(在具有多字節字元集的語言環境中可能超過一個字節)。

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