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、シェルグローブ拡張の一貫した順序を確保するためです。

答え2

最も探している

basename -a /usr/hdp/2.6.4.0-91/tez_hive2/lib/*.jar | wc -c

ワイルドカードを含むパスは、すべてのjarファイル、basenameコマンドストリップディレクトリ(-a多くのパラメータを許可する必要があります)を一覧表示し、バイトのみを計算しwc -cます(一部のファイル名が2バイト文字で構成されている場合wc -m(文字数)、あり)。

しかし、目標がファイルが変更されたことを確認することであれば、おそらくstat(修正時間中)またはmd5sum/shasumチェックサムがより良いツールになるでしょう。

答え3

(隠されていない)ファイル名の文字数を取得するには、jar次の手順を実行します。

cd /usr/hdp/2.6.4.0-91/tez_hive2/lib/ && printf %s *.jar | wc -m

これは、改行を計算せずにファイル名文字のみを計算します(文字数ではなくwc -mバイト数を置き換えます)。wc -c

わざわざ私はそうしない。ls出力の解析

答え4

このコマンドの意味を理解できませんsed。スラッシュを空白に変更しますか?なぜ?

それ以外にも、.jarファイルのすべてのファイル名に含まれる文字の総数を計算したいようです。その場合は、以下を試してください。
ls /usr/hdp/2.6.4.0-91/tez_hive2/lib/*.jar | sed s'/// /g' | wc -c

sedコマンドの2つの異なる可能性: -
sed "s|/| |g"または -tr '/' ' '
エルエスこのコマンドはディレクトリ名を表示しません。必要かどうかわからない。
また、各ファイル名の末尾にあるLFも計算します。大丈夫ですか?

関連情報