フォルダには/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 -l
stat
wdiff
diff
wdiff
これは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も計算します。大丈夫ですか?