
各 .tgz ファイルの合計行数を取得するのに役立つ以下の投稿を見ましたが、この圧縮された .tgz フォルダー内のすべての .js ファイルの行数ではなく、行数のみをカウントしたいです。どうすればいいですか?
答え1
*.js
stdout に一致するすべてのファイルを抽出し、wc -l
行数をカウントするために使用します。
tar -x -f file.tgz -O --wildcards '*.js' | wc -l
-O
tar が通常行うようにファイルをディスクに書き込む代わりに、stdout に出力します。
--wildcards
抽出されるファイル名にワイルドカードを使用できます (これは GNU のみである可能性がありますが、Linux でも同じです)。
これにより、単一の tar ファイルが実行されます。複数の tar ファイルがある場合は、ループで実行し、ループの出力を にパイプすることができますwc -l
。
答え2
.js
圧縮された tar アーカイブ内の各ファイルの行数を取得するには、次を試してください。
tar -xf file.tgz --to-command='echo " $TAR_FILENAME $(wc -l)"' --wildcards '*.js'
デモとして、このアーカイブから始めましょう:
$ tar --list -f file.tgz
a.js
dir1/
dir1/b.js
other.txt
次に、アーカイブ内の各 js ファイルの行数を取得してみましょう。
$ tar -xf file.tgz --to-command='echo " $TAR_FILENAME $(wc -l)"' --wildcards '*.js'
a.js 10
dir1/b.js 15
改善
出力のフォーマットをもっときれいにしたい場合は、printf
の代わりに以下を使用できますecho
:
$ tar -xf file.tgz --to-command='printf "%-10s %s\n" "$TAR_FILENAME" "$(wc -l)"' --wildcards '*.js'
a.js 10
dir1/b.js 15
使い方
-x
tar にファイルを抽出するよう指示します。-f file.tgz
tar に から抽出するように指示しますfile.tgz
。--to-command='echo "$TAR_FILENAME $(wc -l)"'
tar に、抽出された各ファイルにこのコマンドを適用するように指示します。tar は環境変数で各ファイルの名前を提供します$TAR_FILENAME
。--wildcards
tar に、glob を使用して抽出するファイルを選択するように指示します。'*.js'
抽出するファイル glob を指定します。