【问题标题】:Bash shell script for finding file size用于查找文件大小的 Bash shell 脚本
【发布时间】:2015-10-01 14:54:51
【问题描述】:

考虑:

var=`ls -l | grep TestFile.txt | awk '{print $5}'`

我可以读取文件大小,但它是如何工作的?

【问题讨论】:

  • var=ls -l | grep TestFile.txt | awk '{print $5}' 反向引号在这里不可见,当我检查时-> ls -l | grep TestFile.txt 输出只是文件显示怎么来的 awk 也得到了大小
  • 顺便说一句,这似乎是写du的一种非常冗长的方式。
  • stat -c %s TestFile.txt 将是一种更优越的方法......

标签: linux shell filesize


【解决方案1】:

Don't parse ls

size=$( stat -c '%s' TestFile.txt )

【讨论】:

  • 另一种“为工作使用适当的工具”场景...ls - 列出文件,stat - 文件统计信息。聪明的名字...
  • 链接已损坏(“400 Bad Request”)。也许添加 why 内联?
【解决方案2】:

是的,所以基本上你可以把它分成 4 个部分:

  1. ls -l

列出当前目录内容(长列表格式-l

  1. | grep TestFile.txt

管道结果并查找您感兴趣的文件

  1. | awk '{print $5}

将结果传递给 awk 程序,该程序会剪切(通过使用空格作为分隔符)第五列,在这种情况下恰好是文件大小(但这可能会被文件名中的空格破坏,例如)

  1. var=`...`

反引号 (`) 包含命令。命令的输出存储在 var 变量中。

注意:您可以使用du -b TestFile.txtstat -c %s TestFile.txt直接获取文件大小

【讨论】:

  • 感谢我在堆栈溢出中读取并使用了 du 但是我的板不支持字节读取 b #du -b du: invalid option -- 'b' BusyBox v1.20.2 (2015-09-29 11:55:16 IST)多呼叫二进制。用法:du [-aHLdclsxk] [文件]...
  • @Dam 如果 redobot 的回答确实对您有所帮助,请务必接受(勾选正确)。
  • @Dam 似乎 BusyBox 的 du 版本不支持以字节为单位显示文件大小。关闭 -b 选项(或替换为 -k),它将改为以 千字节 为单位显示文件大小。
  • 看起来 BusyBox 版本与 GNU 版本不同。 unix.stackexchange.com/questions/157817/…。正如@IanMcLaird 所说,您可以使用其他选项(-k、-m 或 -h)。除非您想在某些数学运算中使用大小,否则这应该没问题。
  • @redobot 另请注意,dustat 在稀疏文件的情况下可以报告两个非常不同的数字 - stat 将报告与 ls -l 相同的数字,这就是为什么在这种情况下,这可能是更好的答案,而du 将报告实际使用的实际总磁盘空间(尽管du 的某些版本有--apparent-size 或类似选项)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 2016-05-25
  • 1970-01-01
相关资源
最近更新 更多