如何通过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为。如果您想比较更多元数据,请将其更改为(当文件的上次访问时间戳发生更改时,这将生成差异输出)。安装并更改为以获得基于单词的差异而不是基于行的差异。ls -lstatwdiffdiffwdiff

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

答案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 命令的另外两种可能性:
sed "s|/| |g"-- 或 --tr '/' ' '
因为您的LS命令不会显示目录名称,我不确定您是否需要它。
这还将计算每个文件名末尾的 LF。这可以吗?

相关内容