我正在使用这个运行良好的命令:
sudo find / -user web132 -ls
但是当我尝试像
sudo find / -user web132 -ls -lh
我收到错误的语法错误。如何获得属于某个用户的文件大小(以 MB 为单位)?
我正在使用这个运行良好的命令:
sudo find / -user web132 -ls
但是当我尝试像
sudo find / -user web132 -ls -lh
我收到错误的语法错误。如何获得属于某个用户的文件大小(以 MB 为单位)?
您需要使用
exec
谓词find
:这将
ls -lh
在-exec
谓词下执行,find
并将以人类可读的格式为您提供输出。如果您想始终以兆字节为单位输出,则需要一些额外的操作,建议您只希望以人类可读格式输出的-h
选项。ls -lh
这意味着要查找大于 100kb 且小于 500mb 的文件。该
-ls
选项是关于如何格式化输出的,与ls
命令关系不大。这是 find + awk + numfmt 版本。因为 -ls 是查找命令的标志,而不是 ls 的实例,所以您也不能使用 -lh 标志。但是,如果您坚持使用
-ls
find 标志,我们也可以尝试将文件大小格式化为人类可读的形式。find
使用 -ls 标志的输出中的文件大小是字段 #7,因此使用awk 的双向 io,我们只需将该字段转换为人类可读的形式,然后将其替换回去。这是我的主文件夹的示例:
注意:从下面评论中的讨论来看,似乎
mawk
有问题,但gawk
(GNU awk) 工作得很好。我已经为 mawk 找到了一种方法,它只是使用替换 $7 而不是作为参数,而是作为命令的一部分,稍后会扩展。这就是我的意思:find . -maxdepth 1 -user xieerqi -ls | mawk '{command="numfmt --to=iec "$7; command | getline var; $7=var;print }'
find
您可以单独使用%s
格式说明符以字节为单位打印文件大小:由于您需要以兆字节为单位的大小,让我们使用以下方法将最后一个字段除以 1024*1024
awk
:这样,您将始终以兆字节为单位输出,这与
ls -lh
使用较小单位表示较小文件的选项不同。还有
%k
将使用 1K 块的说明符,因此您也可以使用:TL;DR
find … -ls …
与ls
. 如果你需要一些参数,ls
你需要命令ls
。并且-lh
不是 的参数find
,因此是错误。find … -exec …
是一个不错的选择。您还可以使用: