AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 639261
Accepted
Joshi
Joshi
Asked: 2015-06-22 10:49:56 +0800 CST2015-06-22 10:49:56 +0800 CST 2015-06-22 10:49:56 +0800 CST

在 Ubuntu 12.04 (Precise Pangolin) 上查找属于用户的文件,大小以 MB 为单位

  • 772

我正在使用这个运行良好的命令:

sudo find / -user web132 -ls

但是当我尝试像

sudo find / -user web132 -ls -lh

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

command-line
  • 5 5 个回答
  • 1801 Views

5 个回答

  • Voted
  1. Best Answer
    heemayl
    2015-06-22T10:54:37+08:002015-06-22T10:54:37+08:00

    您需要使用exec谓词find:

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

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

    • 4
  2. trognanders
    2015-06-22T10:55:45+08:002015-06-22T10:55:45+08:00
    find / -size +100k -size -500M -user web132
    

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

    • 2
  3. Sergiy Kolodyazhnyy
    2015-06-22T14:19:44+08:002015-06-22T14:19:44+08:00

    这是 find + awk + ​​numfmt 版本。因为 -ls 是查找命令的标志,而不是 ls 的实例,所以您也不能使用 -lh 标志。但是,如果您坚持使用-lsfind 标志,我们也可以尝试将文件大小格式化为人类可读的形式。find使用 -ls 标志的输出中的文件大小是字段 #7,因此使用awk 的双向 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 }'

    • 1
  4. Nykakin
    2015-06-22T16:29:24+08:002015-06-22T16:29:24+08:00

    find您可以单独使用%s格式说明符以字节为单位打印文件大小:

    find / -user web132 -printf "%p %s\n"
    

    由于您需要以兆字节为单位的大小,让我们使用以下方法将最后一个字段除以 1024*1024 awk:

    find / -user web132 -printf "%p %s\n" |  awk '{printf "%sB %fMB\n", $0, $NF/1048576.0}'
    

    这样,您将始终以兆字节为单位输出,这与ls -lh使用较小单位表示较小文件的选项不同。

    还有%k将使用 1K 块的说明符,因此您也可以使用:

    find / -user web132 -printf "%p %k\n" |  awk '{printf "%sB %fMB\n", $0, $NF/1024.0 }'
    
    • 1
  5. A.B.
    2015-06-23T01:23:49+08:002015-06-23T01:23:49+08:00

    TL;DR find … -ls …与ls. 如果你需要一些参数,ls你需要命令ls。并且-lh不是 的参数find,因此是错误。


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

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

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve