2012-04-09 74 views
37

我正在寻找一个Unix命令来打印其大小的文件。我用这个,但它没有工作。在Unix中查找大小的文件

find . -size +10000k -print. 

我想打印文件的大小以及文件名/目录。

+2

该命令给我'发现:未知谓词“-print.''我相信了'.'是不是真的存在。精度很重要。 – 2012-04-09 21:08:32

+0

Stack Overflow是编程和开发问题的网站。这个问题似乎是无关紧要的,因为它不是关于编程或开发。请参阅帮助中心的[我可以询问哪些主题](http://stackoverflow.com/help/on-topic)。也许[超级用户](http://superuser.com/)或[Unix&Linux堆栈交换](http://unix.stackexchange.com/)会是一个更好的地方。另请参阅[我在哪里发布有关Dev Ops的问题?](http://meta.stackexchange.com/q/134306) – jww 2017-02-07 22:52:05

回答

37
find . -size +10000k -exec ls -sd {} + 

如果你的的find版本将不会接受+符号(其作用有点像xargs一样),那么你可以使用(GNU findxargs,所以find可能支持+反正):

find . -size +10000k -print0 | xargs -0 ls -sd 

或者您可能会用\;替代+(并且生活在这种相对低效率的情况下),或者您可能遇到由名称中的空格引起的问题并使用便携式:

find . -size +10000k -print | xargs ls -sd 

-dls命令确保如果一个目录是迄今发现的(不太可能,但是...),然后将目录信息将目录中的印刷,而不是文件。并且,如果您要查找超过1 MB的文件(如现在建议删除的注释),则需要将+10000k调整为1000k+1024k+2048(对于512字节块,默认单位为-size) 。这将列出大小,然后列出文件名。当然,您可以通过将-type f添加到find命令来避免需要-d

+0

谢谢。我用 找到。 -size + 300000k -print | xargs ls -sd 2>/dev/null – 2012-04-09 21:06:50

3

假设你已经GNU发现:

find . -size +10000k -printf '%s %f\n' 

如果你想为大小字段不变的宽度,你可以这样做:

find . -size +10000k -printf '%10s %f\n' 

注意-size +1000k选择至少10,240,000文件字节(k是1024,而不是1000)。你在评论中说你想要大于1M的文件;如果这是1024个* 1024字节,那么这样的:

find . -size +1M ... 

会做的伎俩 - 但它也将打印在正是 1024 * 1024字节的文件大小和名称。如果这很重要,你可以使用:

find . -size +1048575c ... 

你需要决定你想要什么标准。

+0

在'+ 1048575'之后需要'c'来获取字节(字符),而不是默认的512字节块。 – 2012-04-09 21:08:39

+0

@JonathanLeffler:修正了,谢谢! – 2012-04-09 21:10:16

7

查找可用于以%s为单位打印出以字节为单位的文件大小作为printf。 %h /%f分别打印目录前缀和文件名。 \ n强制换行。

find . -size +10000k -printf "%h/%f,%s\n" 

输出

./DOTT/extract/DOTT/TENTACLE.001,11358470 
./DOTT/Day Of The Tentacle.nrg,297308316 
./DOTT/foo.iso,297001116 
+0

有趣。这应该记录为POSIX标准的GNU扩展(我假设)['find'](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html)。 – 2012-04-09 21:14:45