やりたいこと
lsでディレクトリの中身を見ようとすると、ディレクトリの更に中って見てくれないじゃないですか。うーん...伝わりにくい。
.
├── dir-1
│ └── file-2
└── file-1
ってあって、lsを実行してもfile-2は見えないんです。./以下の全てのテキストファイルを再帰的に一覧表示しようとしたらかなり苦戦したのでその備忘録です。
シェル芸っぽいやつ
findコマンドでディレクトリ指定だけすると、ファイルを再帰的に表示してくれます。
でもこのままだと相対パスなのでxargs realpathで絶対パスにします。
その後、fileコマンドでファイルの種類を取得し、grepでテキストファイルのみを選びます。cutで余分な情報を削除して、パスの最後にくっついてる:をsedで取り除きます。
テキストファイルのみを取り出す処理でfileを使っているのを整形するせいで長くなってしまっています。短くする方法があったら教えて下さい。
find ./ | xargs realpath | xargs file --mime-type | grep text/ | cut-d' '-f 1 | sed's|:*$||g'応用
現在のディレクトリ下のテキストファイルの行数の総数をカウントする
上のコマンドで一覧を取得した後、xargs catで全て開いてwc -lで行数を数えています。catとwcの間にsedやgrepを追加すれば「コメントを除外」とか「空行を削除」というのもできます。
find ./ | xargs realpath | xargs file --mime-type | grep text/ | cut-d' '-f 1 | sed's|:*$||g' | xargs cat | wc-l