wc如何统计jar文件的字符数

yae*_*ael 2 bash sed awk shell-script wc

在文件夹下/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
Run Code Online (Sandbox Code Playgroud)

我想通过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
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下,我们从所有字符中获得 758 个字符 .jars

但命令并不优雅

我们怎样才能把命令改进得更好?

Kus*_*nda 5

计算文件名中的字母数不是检测重命名文件名的安全方法。

相反,创建一个简单的名称文件列表,并将其与现有列表进行比较。通过使用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"
Run Code Online (Sandbox Code Playgroud)

显然,您第一次执行此操作时,filelist.old将不存在,因此diff不会运行。

请注意,我在输出文件中保存了每个文件的完整路径。这无关紧要,因为目录路径是静态的。

更改echols -l,如果你想也比较时间戳等改变它stat,如果你想比较更多元数据(当即使在文件的最后访问时间被改变,这将产生diff的输出)。安装wdiff并更改diffwdiff获得基于单词的差异而不是基于行的差异。

LC_ALL=C是为了保证对 shell glob 的扩展进行一致的排序。