Bash

wc如何統計jar文件的字元數

  • February 28, 2019

在文件夾下/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

我想通過wc計算 .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

但是命令並不優雅

我們如何才能將命令改進得更好?

很可能您正在尋找

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

帶有萬用字元的路徑列出所有 jar 文件,basename命令去除目錄(-a需要接受許多參數),並且wc -c只計算字節數(如果某些文件名由 2 個字節字元組成,那麼wc -m(characters count) 可能是更好的選擇)。

但是,如果目標是檢查文件是否已被修改,那麼stat(對於修改時間)或md5sum/shasum對於校驗和可能是一個更好的工具。

計算文件名中的字母數量不是檢測重命名文件名的安全方法。

相反,創建一個簡單的名稱文件列表,並將其與現有列表進行比較。通過使用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您想比較更多元數據,請更改為(即使文件上的最後訪問時間戳更改,也會生成差異輸出)。安裝並更改為以獲得基於單詞的差異而不是基於行的差異。ls -l``stat``wdiff``diff``wdiff

LC_ALL=C是為了保證對 shell glob 的擴展進行一致的排序。

引用自:https://unix.stackexchange.com/questions/503621