wcを介してjarファイルの文字数を計算する方法

wcを介してjarファイルの文字数を計算する方法

フォルダには/usr/hdp/2.6.4.0-91/tez_hive2/lib/ 次の.jarファイルがあります。

$ ls  /usr/hdp/2.6.4.0-91/tez_hive2/lib/ | grep ".jar"
async-http-client-1.8.16.jar
azure-data-lake-store-sdk-2.1.4.jar
commons-cli-1.2.jar
commons-codec-1.4.jar
commons-collections-3.2.2.jar
commons-collections4-4.1.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-math3-3.1.1.jar
guava-11.0.2.jar
hadoop-aws-2.7.3.2.6.4.0-91.jar
hadoop-azure-2.7.3.2.6.4.0-91.jar
hadoop-azure-datalake-2.7.3.2.6.4.0-91.jar
hadoop-mapreduce-client-common-2.7.3.2.6.4.0-91.jar
hadoop-mapreduce-client-core-2.7.3.2.6.4.0-91.jar
hadoop-yarn-server-timeline-pluginstorage-2.7.3.2.6.4.0-91.jar
jersey-client-1.9.jar
jersey-json-1.9.jar
jettison-1.3.4.jar
jetty-6.1.26.hwx.jar
jetty-util-6.1.26.hwx.jar
jsr305-3.0.0.jar
metrics-core-3.1.0.jar
protobuf-java-2.5.0.jar
RoaringBitmap-0.4.9.jar
servlet-api-2.5.jar
slf4j-api-1.7.10.jar

.jarファイル内のすべての文字数を計算したいと思います。トイレ、.jarファイルの名前が変更されたことを確認する

したがって、次のコマンドを実行して、すべての.jarファイル内のすべての文字数を計算します。

ls  /usr/hdp/2.6.4.0-91/tez_hive2/lib/ | grep ".jar" | sed s'/\// /g' | awk '{print $NF}' | wc | awk '{print $NF}'
758

したがって、この場合、すべての文字から758文字を取得します。.jars

しかし、コマンドはエレガントではありません

どうすれば演​​出をより良くできますか?

ベストアンサー1

ファイル名の文字数を数えることは、名前が変更されたファイル名を検出する安全な方法ではありません。

代わりに、単純な名前リストファイルを作成し、それを既存のリストと比較してください。を使用すると、diffリスト内のどの行が変更されたかが正確に表示されます。

#!/bin/sh

LC_ALL=C

newlist=$HOME/filelist.new
oldlist=$HOME/filelist.old

echo /usr/hdp/2.6.4.0-91/tez_hive2/lib/*.jar >"$newlist"

if [ -f "$oldlist" ]; then
    diff -u "$oldlist" "$newlist"
fi

mv "$newlist" "$oldlist"

明らかに、これを初めて実行するとfilelist.old存在しないため、diff実行されません。

出力ファイルに各ファイルのフルパスを保存します。ディレクトリパスが静的であるため、これは重要ではありません。

タイムスタンプなども比較するにはechoに変更してください。より多くのメタデータを比較するには、それを次に変更します(ファイルの最後のアクセスタイムスタンプが変更されると差分出力が生成されます)。行ベースのdiffの代わりに単語ベースのdiffを取得するようにインストールおよび変更されました。ls -lstatwdiffdiffwdiff

これはLC_ALL=C、シェルグローブ拡張の一貫した順序を確保するためです。

おすすめ記事