如何获得find命令以打印出带有文件名的文件大小?

时间:2020-03-05 18:53:57  来源:igfitidea点击:

如果我发出find命令,如下所示:

$ find . -name *.ear

它打印出:

./dir1/dir2/earFile1.ear
./dir1/dir2/earFile2.ear
./dir1/dir3/earFile1.ear

我要"打印"到命令行的是名称和大小:

./dir1/dir2/earFile1.ear  5000 KB
./dir1/dir2/earFile2.ear  5400 KB
./dir1/dir3/earFile1.ear  5400 KB

解决方案

回答

find . -name "*.ear" -exec ls -l {} \;

回答

我们可以尝试以下方法:

find. -name *.ear -exec du {} \;

这将为我们提供大小(以字节为单位)。但是du命令也接受参数-k(对于KB)和-m(对于MB)。它会给你类似的输出

5000  ./dir1/dir2/earFile1.ear
5400  ./dir1/dir2/earFile2.ear
5400  ./dir1/dir3/earFile1.ear

回答

find . -name "*.ear" | xargs ls -sh

回答

一个简单的解决方案是在find中使用-ls选项:

find . -name \*.ear -ls

这样就为我们提供了常规" ls -l"格式的每个条目。或者,要获得我们似乎正在寻找的特定输出,请执行以下操作:

find . -name \*.ear -printf "%p\t%k KB\n"

这将为我们提供文件名,后跟KB大小。

回答

我们需要使用-exec或者-printf。 Printf的工作方式如下:

find . -name *.ear -printf "%p %k KB\n"

-exec功能更强大,可让我们执行任意命令,以便可以使用版本的" ls"或者" wc"来打印文件名以及其他信息。 " man find"将为我们显示printf的可用参数,它不仅可以执行文件大小操作,还可以做更多的事情。

[edit] -printf不在官方的POSIX标准中,因此请检查版本是否支持它。但是,大多数现代系统将使用GNU find或者类似的扩展版本,因此很有可能会实现它。

回答

find . -name '*.ear' -exec ls -lh {} \;

仅来自jer.drab.org的回复。节省了从心理上转换为MB的时间;)

回答

使用gnu find,我想这就是我们想要的。它查找所有真实文件,而不是目录(-f型),并为每个文件打印文件名(%p),制表符(\ t),以千字节为单位的大小(%k),后缀" KB",然后换行符(\ n)。

find . -type f -printf '%p\t%k KB\n'

如果printf命令未按照所需的格式设置内容,则可以使用exec,然后使用要在每个文件上执行的命令。使用{}作为文件名,并以分号(;)终止命令。在大多数shell上,所有这三个字符都应加反斜杠转义。

这是一个简单的解决方案,使用" ls -lh"查找并打印出来,它将以人类可读的形式显示大小(k表示千字节,M表示兆字节):

find . -type f -exec ls -lh \{\} \;

作为另一种选择," wc -c"将打印文件中的字符数(字节):

find . -type f -exec wc -c \{\} \;

回答

Awk可以修正输出,以提供提问者要求的内容。在我的Solaris 10系统上,找到-ls打印大小(以KB为单位)作为第二个字段,因此:

% find . -name '*.ear' -ls | awk '{print , }'
5400 ./dir1/dir2/earFile2.ear
5400 ./dir1/dir2/earFile3.ear
5400 ./dir1/dir2/earFile1.ear

否则,请使用-exec ls -lh并从输出中选择size字段。
再次在Solaris 10上:

% find . -name '*.ear' -exec ls -lh {} \; | awk '{print , }'
5.3M ./dir1/dir2/earFile2.ear
5.3M ./dir1/dir2/earFile3.ear
5.3M ./dir1/dir2/earFile1.ear

回答

$ find . -name "test*" -exec du -sh {} \;
4.0K    ./test1
0       ./test2
0       ./test3
0       ./test4
$

脚本世界参考