【问题标题】:Shell file size in LinuxLinux 中的 Shell 文件大小
【发布时间】:2022-01-21 04:46:56
【问题描述】:

如何将文件的大小放入变量中?

ls -l | grep testing.txt | cut -f6 -d' '

给出了大小,但如何将其存储在 shell 变量中?

【问题讨论】:

  • 是的,它是 bash shell,谢谢大家。
  • 2011 年好像有人问过其他问题
  • 可以,但有更好的答案。
  • 更好的答案,是的。但这并不意味着这个问题与一年后创建的另一个问题重复!

标签: linux shell


【解决方案1】:
filesize=$(stat -c '%s' testing.txt)

【讨论】:

  • stat -f '%z' 在 MacOS X 上。
【解决方案2】:

你可以用ls这样做(查看手册页了解-s的含义)

var=$(ls -s1 testing.txt | awk '{print $1}')

或者您可以使用stat-c '%s'

或者你可以使用find (GNU):

var=$(find testing.txt -printf "%s")

【讨论】:

  • find 解决方案适用于 MINGW 和 Windows 上的 git bash。其他答案均不适用于 MINGW。
  • 如果您想要一个适用于每个 POSIX 系统的版本,wc -c 会比依赖ls 行为更好有 GNU findstat 可用。
  • 注意 wc -c 对于像 /proc/cpuinfo 这样的伪文件更准确
【解决方案3】:
size() {
  file="$1"
  if [ -b "$file" ]; then
    /sbin/blockdev --getsize64 "$file"
  else
    wc -c < "$file"  # Handles pseudo files like /proc/cpuinfo
    # stat --format %s "$file"
    # find "$file" -printf '%s\n'
    # du -b "$file" | cut -f1
  fi
}

fs=$(size testing.txt)

【讨论】:

    【解决方案4】:
    size=`ls -l | grep testing.txt | cut -f6 -d' '`
    

    【讨论】:

    • 不保证大小会在以空格分隔的字段 6 中。
    • 这也是低效的,因为管道lsgrep 列出目录中的所有 文件并对它们的名称进行排序(这可能需要在目录中花费大量时间有数千个文件),而且容易出错,因为grep testing.txt 还返回名称类似于not_testingatxt_file 的文件(因为正则表达式中的. 表示匹配任何字符)。
    【解决方案5】:

    您可以使用命令wc 以字节为单位获取文件大小,这在Linux 系统上相当常见,因为它是GNU coreutils 的一部分:

    wc -c < file
    

    在 Bash 脚本中,您可以将其读入如下变量:

    FILESIZE=$(wc -c < file)
    

    来自man wc

    -c, --bytes
           print the byte counts
    

    【讨论】:

      【解决方案6】:
          a=\`stat -c '%s' testing.txt\`;
          echo $a
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-10
        • 2011-04-03
        • 2012-06-21
        • 1970-01-01
        • 2014-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多