Bash
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
我想通過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 的擴展進行一致的排序。