如何让find命令打印出文件名和文件大小?

166
如果我执行如下命令:

查找(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
17个回答

2
这应该可以帮助您找到您要查找的内容,包括格式(即文件名先,大小后):
find . -type f -iname "*.ear" -exec du -ah {} \; | awk '{print $2"\t", $1}'

示例输出(我使用 -iname "*.php" 获取了一些结果):

./plugins/bat/class.bat.inc.php  20K
./plugins/quotas/class.quotas.inc.php    8.0K
./plugins/dmraid/class.dmraid.inc.php    8.0K
./plugins/updatenotifier/class.updatenotifier.inc.php    4.0K
./index.php      4.0K
./config.php     12K
./includes/mb/class.hwsensors.inc.php    8.0K

1
你可以尝试这个:
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

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

1

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

0
如果您需要获取总大小,这里有一个脚本建议。
#!/bin/bash
totalSize=0

allSizes=`find . -type f -name *.ear -exec stat -c "%s" {} \;`

for fileSize in $allSizes; do
    totalSize=`echo "$(($totalSize+$fileSize))"`
done
echo "Total size is $totalSize bytes"

-1
你可以尝试使用 for 循环:
for i in `find . -iname "*.ear"`; do ls -lh $i; done

最好使用“find”命令中的“-exec”参数,它就是为这个目的而设计的。 - emilBeBri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接