ディレクトリには多くのファイルがあります。一部のファイルには1行があり、一部のファイルにはより多くの行があります。
ファイルの行数が2より大きい特定のディレクトリにファイル名(フルパスを含む)を表示しようとしています。
これまで私がしたことは、ディレクトリにファイルを表示することでした。 /abc/def -最大深さ1 -タイプfを探す
ベストアンサー1
GNUを使用awk
するmawk
そして他のものも、少なくとも3行を含む現在のディレクトリの一般ファイルを一覧表示します。
find . ! -name . -prune -type f -size +2c -exec awk '
FNR==3{print FILENAME; nextfile}' {} +
(ここには終了しない行も含まれています。ファイルにa\nb\nc
2行しか含まれていない場合、a\nb\nc\n
ファイルはまだ3行と見なされますが、wc -l
2行だけが返されます。-size +2c
これは、3行未満のファイルを開いて読み取る最適化をスキップするだけです)。バイト、3行を含めることができないからです)。
これは、行番号を見つけるためにファイル全体を読み取るのではなく、できるだけ少ない数のコマンドを実行し、3行目を確認するとすぐにファイル処理を停止するので効率的です。
シェルがあれば、zsh
次のように短縮できます。
awk 'FNR==3{print FILENAME; nextfile}' ./*(D.L+2)
find . ! -name . -prune
GNU標準と同じですfind . -mindepth 1 -maxdepth 1
(打つ)を除くすべてのディレクトリ.
。
(上記のコードはサポートされていない実装awk
でも機能します。注意してください。コードはファイル全体を読み込み、文は変数参照としてのみ処理されます)。awk
nextfile
nextfile