首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用wc计数jar文件的字符

如何用wc计数jar文件的字符
EN

Unix & Linux用户
提问于 2019-02-28 19:03:48
回答 4查看 791关注 0票数 2

/usr/hdp/2.6.4.0-91/tez_hive2/lib/文件夹下,.jar文件如下所示

代码语言:javascript
复制
$ 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文件中的所有字符

代码语言:javascript
复制
ls  /usr/hdp/2.6.4.0-91/tez_hive2/lib/ | grep ".jar" | sed s'/\// /g' | awk '{print $NF}' | wc | awk '{print $NF}'
758

因此,在本例中,我们从所有.jars中得到758个字符

但这个命令不优雅

我们怎样才能把命令做得更好呢?

EN

回答 4

Unix & Linux用户

回答已采纳

发布于 2019-02-28 19:39:53

很可能你在找

代码语言:javascript
复制
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 (用于校验和)可能是一个更好的工具。

票数 4
EN

Unix & Linux用户

发布于 2019-02-28 19:56:08

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

相反,创建名称的简单文件列表,并将其与现有列表进行比较。通过使用diff,可以准确地显示列表中哪一行(S)已经更改。

代码语言:javascript
复制
#!/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 (这将在文件上的最后一次访问时间戳更改时生成diff输出)。安装wdiff并将diff更改为wdiff,以获得基于文字的差异,而不是基于行的差异。

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

票数 5
EN

Unix & Linux用户

发布于 2019-02-28 19:46:38

要获取(非隐藏的) jar文件名中的字符数,我会这样做。

代码语言:javascript
复制
cd /usr/hdp/2.6.4.0-91/tez_hive2/lib/ && printf %s *.jar | wc -m

这将不计算任何换行符,只计算文件名字符(将wc -m替换为wc -c,以字节数代替字符)。

故意的,我不是解析ls输出

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/503621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档