Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Bash:找到所有子目录中的所有jar,并显示它们的文件夹、名称和大小_Java_Bash - Fatal编程技术网

Java Bash:找到所有子目录中的所有jar,并显示它们的文件夹、名称和大小

Java Bash:找到所有子目录中的所有jar,并显示它们的文件夹、名称和大小,java,bash,Java,Bash,我对这次聚会很陌生,想问一下: 是否可以(使用2-liner;-)来 在所有子文件夹中查找所有JAR并显示其文件夹、名称和大小 就这样, /jars/ | abc.jar | 123456 /ext/ | def.jar | 1234 /ext/ | ghi.jar | 2345 所以它应该是(伪代码) 谢谢 伯恩哈德如果我理解你的问题,你可以用find和-exec;大概 find . -name "*.jar" -type f -exec du -m {} \; 它将找到所有以.jar

我对这次聚会很陌生,想问一下: 是否可以(使用2-liner;-)来 在所有子文件夹中查找所有JAR并显示其文件夹、名称和大小

就这样,

/jars/ | abc.jar | 123456
/ext/  | def.jar | 1234
/ext/  | ghi.jar | 2345
所以它应该是(伪代码)

谢谢
伯恩哈德

如果我理解你的问题,你可以用find和
-exec
;大概

find . -name "*.jar" -type f -exec du -m {} \;
它将找到所有以
.jar
结尾的文件,并对每个找到的jar文件调用
du-m

根据下面的OP评论进行编辑。要单独获取所有内容,您可以使用-

for i in `find . -name "*.jar" -type f`; do 
  echo $(du -m $i|awk '{print $1}') $(dirname $i) $(basename $i)
done

如果我理解您的问题,您可以使用find和
-exec
;大概

find . -name "*.jar" -type f -exec du -m {} \;
它将找到所有以
.jar
结尾的文件,并对每个找到的jar文件调用
du-m

根据下面的OP评论进行编辑。要单独获取所有内容,您可以使用-

for i in `find . -name "*.jar" -type f`; do 
  echo $(du -m $i|awk '{print $1}') $(dirname $i) $(basename $i)
done

作为记录,这个问题与其说是关于bash本身,不如说是关于提供bash的系统上常见的命令行工具。实际上,您可以主要使用bash本身来执行繁重的工作,但是如果您想要一个两(或者实际上是一)行程序,那么您应该满足
sed
程序的要求。例如:

find . -name '*.jar' -exec ls -l {} \; | sed 's,^\([^ ]\+ \+\)\{4\}\([0-9]\+\) \+.* \([^ ]\+/\)\([^ /]\+\)$,\3 | \4 | \2 ,'

是的,它非常神秘。大部分神秘的部分是一个正则表达式,用于选择长格式目录列表中需要的部分。但是你需要简短,简洁是有代价的。

请注意,这个问题与bash本身无关,而与提供bash的系统上常见的命令行工具有关。实际上,您可以主要使用bash本身来执行繁重的工作,但是如果您想要一个两(或者实际上是一)行程序,那么您应该满足
sed
程序的要求。例如:

find . -name '*.jar' -exec ls -l {} \; | sed 's,^\([^ ]\+ \+\)\{4\}\([0-9]\+\) \+.* \([^ ]\+/\)\([^ /]\+\)$,\3 | \4 | \2 ,'

是的,它非常神秘。大部分神秘的部分是一个正则表达式,用于选择长格式目录列表中需要的部分。但是你想要的是简短,简洁是有代价的。

只有使用
查找
的解决方案:

find -type f -name "*.jar" -printf "| %20h | %10f | %10s |\n"

只有使用
find
才能找到解决方案:

find -type f -name "*.jar" -printf "| %20h | %10f | %10s |\n"

谢谢,差不多了。我可以将ext/jars/myjar.jar这样的文件名拆分成ext/jars | myjar.jar吗?@Bernie Edited,类似的东西应该可以做到。太棒了!就这样。关于$(dirname$i)和$(basename$i)只有一个问题:我猜,'dirname'和'basename'是常量,对吗?他们来自“查找”命令,是吗?对不起,这是两个问题;-)dirname和basename都是命令
man dirname
man basename
应该解释一下。谢谢,差不多了。我可以将ext/jars/myjar.jar这样的文件名拆分成ext/jars | myjar.jar吗?@Bernie Edited,类似的东西应该可以做到。太棒了!就这样。关于$(dirname$i)和$(basename$i)只有一个问题:我猜,'dirname'和'basename'是常量,对吗?他们来自“查找”命令,是吗?对不起,这是两个问题;-)dirname和basename都是命令
man dirname
man basename
应该解释一下。我对这个解决方案感到震惊和敬畏。我花了好几次时间阅读了“查找”手册页,才了解到您实际上在做什么。我猜,我需要花一年的时间来深入理解“查找”命令的功能。回答得好!是的,一个很棒的工具。我已经使用它很多年了,有很多功能还没有被发现。一年只学习基本功能就足够了。我对这个解决方案感到震惊和敬畏。我花了好几次时间阅读了“查找”手册页,才了解到您实际上在做什么。我猜,我需要花一年的时间来深入理解“查找”命令的功能。回答得好!是的,一个很棒的工具。我已经使用它很多年了,有很多功能还没有被发现。一年只学习基本功能就足够了。