【问题标题】:linux command to get size of files and directories present in a particular folder? [closed]linux命令获取特定文件夹中存在的文件和目录的大小? [关闭]
【发布时间】:2012-07-28 00:53:31
【问题描述】:

如何在 Linux 中查看文件和目录的大小?如果使用df -m,那么它会在顶层显示所有目录的大小,但是对于目录中的目录和文件,我如何查看大小?

【问题讨论】:

    标签: linux file


    【解决方案1】:

    du命令。

    目录和/或文件的大小,以人性化的方式:

    $ du -sh .bashrc /tmp
    

    我把它记成了一个不存在的英文单词dush


    --apparent-size 命令行开关使其测量表面大小(ls 显示的内容)而不是实际磁盘使用情况。

    【讨论】:

    • 如何查看以字节为单位的大小(Kilo、Mega、Giga...)?
    • @FranciscoCorralesMorales -h 标志应该满足您的要求:以人类可读格式打印尺寸(例如,1K 234M 2G)
    • 我认为这是不对的。 du 所做的是 Summarize disk usage of the set of FILEs ,也就是说,如果文件非常小(即 2140 字节),“du”的输出(在我的情况下)为 4KB,因为那是集群的大小
    • @mfloris 然后使用--apparent-size
    • 我喜欢du -hs *查看当前目录中所有文件和目录的大小。
    【解决方案2】:

    对文件使用ls 命令,对目录使用du 命令。

    检查文件大小

    ls -l filename   #Displays Size of the specified file
    ls -l *          #Displays Size of All the files in the current directory
    ls -al *         #Displays Size of All the files including hidden files in the current directory
    ls -al dir/      #Displays Size of All the files including hidden files in the 'dir' directory
    

    ls 命令不会列出目录的实际大小(why?)。因此,我们为此使用du

    检查目录大小

    du -sh directory_name    #Gives you the summarized(-s) size of the directory in human readable(-h) format
    du -bsh *                #Gives you the apparent(-b) summarized(-s) size of all the files and directories in the current directory in human readable(-h) format
    

    在上述任何命令中包含-h 选项(例如:ls -lh *du -sh)将为您提供人类可读格式的大小(kbmbgb、... )

    有关更多信息,请参阅man lsman du

    【讨论】:

    • ls 不会显示目录所有内容的总大小。
    • @MaximYegorushkin 谢谢。已更正。
    • 如何查看以字节为单位的大小(Mega、Giga、...)?
    • @FranciscoCorralesMorales ls -lh 将以 kb MB GB 等为单位显示大小。
    • 请注意du 命令显示文件的磁盘使用情况,这可能大于文件的实际大小。您可以使用du -d 来获取实际大小,就像ls 一样。更多信息:unix.stackexchange.com/a/106278/155224
    【解决方案3】:

    使用ls -s 列出文件大小,或者如果您更喜欢ls -sh 列出人类可读的大小。

    对于目录,使用du,同样,du -h 用于人类可读的大小。

    【讨论】:

    • 一个tip就是使用; 'du -sh *' 列出所有目录大小。 :)
    • "ls -l -sh" 是我一直在寻找的那个
    【解决方案4】:

    ls -l --block-size=M 将为您提供一个长格式列表(需要实际查看文件大小)并将文件大小四舍五入到最接近的 MiB。

    如果您想要 MB(10^6 字节)而不是 MiB(2^20 字节)单位,请改用 --block-size=MB。

    如果您不想将 M 后缀附加到文件大小,则可以使用 --block-size=1M 之类的东西。感谢 Stéphane Chazelas 的建议。

    这在 ls 的手册页中有描述; man ls 并搜索 SIZE。它也允许使用 MB/MiB 以外的单位,并且从外观上看(我没有尝试过)也可以使用任意块大小(因此,如果需要,您可以将文件大小视为 412 字节块的数量到)。

    请注意,--block-size 参数是 Open Group ls 之上的 GNU 扩展,因此如果您没有 GNU 用户空间(大多数 Linux 安装都有),这可能不起作用。 GNU coreutils 8.5 中的 ls 确实支持 --block-size ,如上所述。

    【讨论】:

      【解决方案5】:

      还有一个很棒的ncdu 实用程序 - 它可以显示目录大小以及有关子文件夹和文件的详细信息。

      安装

      Ubuntu:

      $ sudo apt-get install ncdu
      

      用法

      只需在命令行中输入ncdu [path]。分析路径几秒钟后,您将看到如下内容:

      $ ncdu 1.11 ~ Use the arrow keys to navigate, press ? for help
      --- / ---------------------------------------------------------
      .  96,1 GiB [##########] /home
      .  17,7 GiB [#         ] /usr
      .   4,5 GiB [          ] /var
          1,1 GiB [          ] /lib
        732,1 MiB [          ] /opt
      . 275,6 MiB [          ] /boot
        198,0 MiB [          ] /storage
      . 153,5 MiB [          ] /run
      .  16,6 MiB [          ] /etc
         13,5 MiB [          ] /bin
         11,3 MiB [          ] /sbin
      .   8,8 MiB [          ] /tmp
      .   2,2 MiB [          ] /dev
      !  16,0 KiB [          ] /lost+found
          8,0 KiB [          ] /media
          8,0 KiB [          ] /snap
          4,0 KiB [          ] /lib64
      e   4,0 KiB [          ] /srv
      !   4,0 KiB [          ] /root
      e   4,0 KiB [          ] /mnt
      e   4,0 KiB [          ] /cdrom
      .   0,0   B [          ] /proc
      .   0,0   B [          ] /sys
      @   0,0   B [          ]  initrd.img.old
      @   0,0   B [          ]  initrd.img
      @   0,0   B [          ]  vmlinuz.old
      @   0,0   B [          ]  vmlinuz
      

      d删除当前高亮的元素,用CTRL + c

      退出

      【讨论】:

        【解决方案6】:

        文件大小(MB)

        ls -l --b=M  filename | cut -d " " -f5
        

        文件大小(GB)

        ls -l --b=G  filename | cut -d " " -f5
        

        【讨论】:

        • 如何获取这两个字段作为输出?
        【解决方案7】:

        你可以使用:

        ls -lh

        使用此命令,您将看到目录的表观空间和文件的真实空间,以及所显示文件的详细名称,以及每个文件的大小和创建日期。

        【讨论】:

        • ls -l 会给你包含元数据的文件大小吗?因为我尝试使用的文件之一似乎稍微大了 4kb
        【解决方案8】:

        你可以在 linux 中使用 ls -sh 你也可以进行排序 您需要转到要检查文件大小的目录

        【讨论】:

          【解决方案9】:

          我一直在做以下事情:

          $ du -sh backup-lr-May-02-2017-1493723588.tar.gz
          

          注意:

          -s, --summarize
                      display only a total for each argument
          -h, --human-readable
                      print sizes in human readable format (e.g., 1K 234M 2G)
          

          【讨论】:

            【解决方案10】:

            您可以使用以下命令以易于阅读的格式获取文件列表。

            ls -lrtsh

            【讨论】:

              【解决方案11】:

              我自己是 Ubuntu 16.04 用户,我发现ll 命令是迄今为止查看目录内容的最简单方法。我注意到并非所有 Linux 发行版都支持此命令,但可能有针对每个发行版的解决方法/安装。

              例子:

              user@user-XPS-15-9560:/$ ll
              total 188
              drwxr-xr-x  27 root root  4096 Jan 26 09:13 ./
              drwxr-xr-x  27 root root  4096 Jan 26 09:13 ../
              drwxr-xr-x   2 root root  4096 Jan 22 15:13 bin/
              drwxr-xr-x   4 root root 12288 Jan 29 11:35 boot/
              drwxr-xr-x   2 root root  4096 Sep  3 18:14 cdrom/
              drwxr-xr-x  20 root root  4440 Feb  5 08:43 dev/
              drwxr-xr-x 153 root root 12288 Feb  2 15:17 etc/
              drwxr-xr-x   4 root root  4096 Sep  3 18:15 home/
              ...
              

              对我来说最大的优势是它使用起来快速且非常直观。

              更新:我不知道在 Ubuntu 上它是一个预配置的别名。您可以通过在命令行上执行 alias ll="ls -la" 或在 .bashrc 配置文件中添加此条目来轻松设置它:

              sudo nano ~/.bashrc
              ...add line described above and save file by pressing Ctrl+X and Y...
              source ~/.bashrc
              

              【讨论】:

                【解决方案12】:

                您必须区分文件大小磁盘使用情况。两者的主要区别在于文件被“切成碎片”并存储在块中。

                现代块大小为 4KiB,因此文件将使用 4KiB 的磁盘空间倍数,无论它们有多小。

                如果您使用命令stat,您可以并排看到两个数字。

                stat file.c
                

                如果您想要一个更紧凑的目录视图,您可以使用ls -ls,这将为您提供 1KiB 单位的使用量。

                ls -ls dir
                

                此外,du 会以 1KiB 为单位,或带有 -u 标志的 dutree 为您提供真实的磁盘使用情况。

                示例:1 字节文件的用法

                $ echo "" > file.c
                
                $ ls -l file.c
                -rw-r--r-- 1 nacho nacho 1 Apr 30 20:42 file.c
                
                $ ls -ls file.c
                4 -rw-r--r-- 1 nacho nacho 1 Apr 30 20:42 file.c
                
                $ du file.c
                4 file.c
                
                $ dutree file.c
                [ file.c 1 B ]
                
                $ dutree -u file.c
                [ file.c 4.00 KiB ]
                
                $ stat file.c
                 File: file.c
                 Size: 1 Blocks: 8 IO Block: 4096 regular file
                Device: 2fh/47d Inode: 2185244 Links: 1
                Access: (0644/-rw-r--r--) Uid: ( 1000/ nacho) Gid: ( 1000/ nacho)
                Access: 2018-04-30 20:41:58.002124411 +0200
                Modify: 2018-04-30 20:42:24.835458383 +0200
                Change: 2018-04-30 20:42:24.835458383 +0200
                 Birth: -
                

                此外,在现代文件系统中,我们可以使用快照、稀疏文件(其中包含漏洞的文件)使情况更加复杂。

                您可以在本文中查看更多详细信息:understanding file size in Linux

                【讨论】:

                  【解决方案13】:

                  如果您在脚本中使用它,请使用stat

                  $ date | tee /tmp/foo
                  Wed Mar 13 05:36:31 UTC 2019
                  
                  $ stat -c %s /tmp/foo
                  29
                  
                  $ ls -l /tmp/foo
                  -rw-r--r--  1 bruno  wheel  29 Mar 13 05:36 /tmp/foo
                  

                  这将为您提供以字节为单位的大小。有关更多输出格式选项,请参阅man stat

                  OSX/BSD equivalent 是:

                  $ date | tee /tmp/foo
                  Wed Mar 13 00:54:16 EDT 2019
                  
                  $ stat -f %z /tmp/foo
                  29
                  
                  $ ls -l /tmp/foo
                  -rw-r--r--  1 bruno  wheel  29 Mar 13 00:54 /tmp/foo
                  

                  【讨论】:

                    【解决方案14】:

                    转到特定目录然后运行下面的命令

                    # du -sh * 
                    
                    4.0K    1
                    4.0K    anadb.sh --> Shell file
                    4.0K    db.sh/    --> shell file
                    24K     backup4/  --> Directory
                    8.0K    backup6/  --> Directory 
                    1.9G    backup.sql.gz  --> sql file
                    

                    【讨论】:

                      【解决方案15】:

                      获取目录总大小或文件使用总大小,

                      du -csh <directory or filename*> | grep total
                      

                      【讨论】:

                        【解决方案16】:

                        使用带有 -h 参数的 ls 命令:[root@hots19 etc]# ls -lh
                        h : 供人类阅读。

                        Exemple: 
                            [root@CIEYY1Z3 etc]# ls -lh
                            total 1.4M
                            -rw-r--r--.  1 root   root      44M Sep 15  2015 adjtime
                            -rw-r--r--.  1 root   root     1.5K Jun  7  2013 aliases
                            -rw-r--r--   1 root   root      12K Nov 25  2015 aliases.db
                            drwxr-xr-x.  2 root   root     4.0K Jan 11  2018 alternatives
                            -rw-------.  1 root   root      541 Jul  8  2014 anacrontab
                            -rw-r--r--.  1 root   root      55M Sep 16  2014 asound.conf
                            -rw-r--r--.  1 root   root       1G Oct  6  2014 at.deny
                        

                        【讨论】:

                          【解决方案17】:

                          转到选择的目录并执行:

                          $ du -d 1 -h
                          

                          地点:

                          -d 1 is the depth of the directories
                          
                          -h is the human-readable option
                          

                          你会看到这样的:

                          0   ./proc
                          8.5M    ./run
                          0   ./sys
                          56M ./etc
                          12G ./root
                          33G ./var
                          23M ./tmp
                          3.2G    ./usr
                          154M    ./boot
                          26G ./home
                          0   ./media
                          0   ./mnt
                          421M    ./opt
                          0   ./srv
                          2.6G    ./backups
                          80G .
                          

                          【讨论】:

                          • 这就是我要找的。谢谢!
                          【解决方案18】:

                          du -sh [文件名]

                          非常适合获取特定文件的大小。

                          【讨论】:

                            【解决方案19】:

                            您只需要-l--block-size 标志

                            工作目录下所有文件和目录的大小(以 MB 为单位)

                            ls -l --block-size=M
                            

                            工作目录下所有文件和目录的大小(以 GB 为单位)

                            ls -l --block-size=G
                            

                            特定文件或目录的大小

                            ls -l --block-size=M my_file.txt
                            ls -l --block-size=M my_dir/
                            

                            ls --help
                            

                            -l 使用长列表格式

                            --block-size=SIZE:在打印之前按SIZE 缩放尺寸;例如。, '--block-size=M' 以单位打印尺寸 1,048,576 字节;请参阅下面的SIZE 格式

                            SIZE 是一个整数和可选单位(例如:10M 是 10*1024*1024)。 单位为 K、M、G、T、P、E、Z、Y(1024 的幂)或 KB、MB、... (1000 的幂)。


                            【讨论】:

                              【解决方案20】:

                              您可以在此处使用ncdu 磁盘使用分析器。它在 ncurses 界面中显示文件和目录的大小。您可以导航到每个目录并从同一界面查看文件大小。

                              安装

                              $ sudo apt-get install ncdu
                              

                              分析

                              $ ncdu <directory>
                              

                              【讨论】:

                                【解决方案21】:
                                ls -sh video.mp4 | sed s/video.mp4//g
                                

                                输出, 5.6M

                                【讨论】:

                                • 您能否提供一些背景信息,说明为什么这会回答 OP 的问题?例如,解释每个命令的作用。
                                • 为什么是 sed 部分?
                                • 我正在搜索命令以准确获取用户输入的文件的大小。我发现这个堆栈很有用。但是,这里给出的所有命令都会显示文件名。所以,根据我的需要,我只需要输出的大小。就像5.6M 所以,我发布了这个,如果有同样需要的人可能会对此有所帮助。 ls -sh video.mp4 用文件名列出文件大小,我添加了sed s/video.mp4//g 用空替换文件名。例如:sed s/$filename/empty/g 这样。希望至少有人和我一样有同样需要的人会发现它有帮助。
                                【解决方案22】:

                                我更喜欢这个命令ll -sha

                                【讨论】:

                                  猜你喜欢
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2013-01-11
                                  • 2023-03-28
                                  • 2013-05-31
                                  • 2020-02-01
                                  相关资源
                                  最近更新 更多