在 Ubuntu 12.04(Precise Pangolin)上查找大小为 MB 的属于某个用户的文件

在 Ubuntu 12.04(Precise Pangolin)上查找大小为 MB 的属于某个用户的文件

我正在使用这个命令,它工作正常:

sudo find / -user web132 -ls

但当我尝试

sudo find / -user web132 -ls -lh

我收到错误的语法错误。如何获取某个用户的文件大小(以 MB 为单位)?

答案1

您需要使用exec谓词find

sudo find / -user web132 -exec ls -lh {} +

这将在谓词ls -lh下执行,并以人类可读的格式提供输出。如果您希望始终以兆字节为单位输出,则需要进行一些额外操作,选项中建议您只希望以人类可读的格式输出。-execfind-hls -lh

答案2

find / -size +100k -size -500M -user web132

意思是查找大于 100kb 且小于 500mb 的文件。该-ls选项是关于输出格式的,与命令关系不大ls

答案3

这是 find + awk + ​​numfmt 版本。因为 -ls 是 find 命令的标志,而不是 ls 的实例,所以您也不能使用 -lh 标志。但是,如果您坚持在 find 中使用该标志,我们也可以尝试将文件大小格式化为人类可读的形式。使用 -ls 标志-ls输出的文件大小是字段 #7,因此使用findawk 的双向 io,我们只需将该字段转换为人类可读的形式,然后将其替换回来。

find / -user web132 -ls | 
 awk '{ command="numfmt --to=iec "; command $7 | getline result; $7=result;print; close(command) }'

这是我的主文件夹的示例:

$ find . -maxdepth 1 -user xieerqi -ls | awk '{ command="numfmt --to=iec "; command $7 |& getline result; $7=result;print; close(command) }'   
3018363 4 drwxr-xr-x 43 xieerqi xieerqi 4.0K Jun 22 00:33 .
3409153 4 drwx------ 3 xieerqi xieerqi 4.0K Jun 22 00:33 ./.gconf
3018459 4 -rw-rw-r-- 1 xieerqi xieerqi 756 Jun 11 00:08 ./record
3018368 16 -rw------- 1 xieerqi xieerqi 13K Jun 21 23:14 ./.bash_history
3018364 12 -rw-r--r-- 1 xieerqi xieerqi 8.8K May 28 03:59 ./examples.desktop
3018535 4 -rw-rw-r-- 1 xieerqi xieerqi 64 Jun 21 16:04 ./testfile.txt
3018473 4 drwxrwxr-x 2 xieerqi xieerqi 64 Jun 16 23:28 ./netmanager

笔记:从下面评论中的讨论来看,这似乎mawk存在问题,但gawk(GNU awk)工作得很好。我已经想出了一个针对 mawk 的方法,它只是利用替换 $7 而不是将其作为参数,而是作为命令的一部分,稍后会进行扩展。我的意思是:

find . -maxdepth 1 -user xieerqi -ls | mawk '{command="numfmt --to=iec "$7; command | getline var; $7=var;print }'

答案4

总结 find … -ls …与 不同ls。如果您需要 的一些参数,则ls需要命令ls。并且-lh不是 的参数find,因此会出现错误。


find … -exec …是一个不错的选择。您还可以使用:

sudo find / -user web132 -print0 | xargs -0 ls -lh {}

相关内容