当前位置:  开发笔记 > 编程语言 > 正文

如何检查文件的大小?

如何解决《如何检查文件的大小?》经验,为你挑选了6个好方法。

我有一个检查0大小的脚本,但我认为必须有一种更简单的方法来检查文件大小.即file.txt通常为100k; 如何使脚本检查它是否小于90k(包括0),并使它做一个新的副本,因为在这种情况下文件已损坏.

我目前正在使用的..

if [ -n file.txt ]
then
 echo "everything is good"
else
 mail -s "file.txt size is zero, please fix. " myemail@gmail.com < /dev/null
 # Grab wget as a fallback 
 wget -c https://www.server.org/file.txt -P /root/tmp --output-document=/root/tmp/file.txt
 mv -f /root/tmp/file.txt /var/www/file.txt
fi

Mikel.. 233

[ -n file.txt ]不检查其大小,它检查字符串file.txt是否为非零长度,因此它将始终成功.

如果你想说"大小不为零",你需要[ -s file.txt ].

要获取文件大小,可以使用wc -c以字节为单位获取大小(文件长度):

file=file.txt
minimumsize=90000
actualsize=$(wc -c <"$file")
if [ $actualsize -ge $minimumsize ]; then
    echo size is over $minimumsize bytes
else
    echo size is under $minimumsize bytes
fi

在这种情况下,听起来就像你想要的那样.

但是,仅供参考,如果您想知道文件使用了多少磁盘空间,您可以使用du -k以千字节为单位来获取大小(使用的磁盘空间):

file=file.txt
minimumsize=90
actualsize=$(du -k "$file" | cut -f 1)
if [ $actualsize -ge $minimumsize ]; then
    echo size is over $minimumsize kilobytes
else
    echo size is under $minimumsize kilobytes
fi

如果您需要更多控制输出格式,您还可以查看stat.在Linux上,你会从像stat -c '%s' file.txtBSD/Mac OS X这样的东西开始stat -f '%z' file.txt.



1> Mikel..:

[ -n file.txt ]不检查其大小,它检查字符串file.txt是否为非零长度,因此它将始终成功.

如果你想说"大小不为零",你需要[ -s file.txt ].

要获取文件大小,可以使用wc -c以字节为单位获取大小(文件长度):

file=file.txt
minimumsize=90000
actualsize=$(wc -c <"$file")
if [ $actualsize -ge $minimumsize ]; then
    echo size is over $minimumsize bytes
else
    echo size is under $minimumsize bytes
fi

在这种情况下,听起来就像你想要的那样.

但是,仅供参考,如果您想知道文件使用了多少磁盘空间,您可以使用du -k以千字节为单位来获取大小(使用的磁盘空间):

file=file.txt
minimumsize=90
actualsize=$(du -k "$file" | cut -f 1)
if [ $actualsize -ge $minimumsize ]; then
    echo size is over $minimumsize kilobytes
else
    echo size is under $minimumsize kilobytes
fi

如果您需要更多控制输出格式,您还可以查看stat.在Linux上,你会从像stat -c '%s' file.txtBSD/Mac OS X这样的东西开始stat -f '%z' file.txt.


使用`wc -c <"$ file"`(注意`<`),在这种情况下你不需要`| cut ...`part(发布后,在OSX上不起作用).OSX上`du`的最小`BLOCKSIZE`值是'512`.
为什么`du -b"$ file"| cut -f 1`而不是`stat -c'%s'"$ file"`?或者`stat --printf ="%s""$ file"`?
@PetriSirkkala在我的Linux系统上,`wc -c Mac OS不能`du -b`

2> Daniel C. So..:

令我惊讶的是,没有人提到stat检查文件大小.有些方法肯定更好:-s用于查明文件是否为空是比其他任何方法都容易,如果你想要的话.如果你想找到一个大小的文件,那么find肯定是要走的路.

我也喜欢du用kb获取文件大小,但是,对于字节,我会使用stat:

size=$(stat -f%z $filename) # BSD stat

size=$(stat -c%s $filename) # GNU stat?


`stat`是一个好主意,但在CentOS上这对我有用:`size = $(stat -c%s $ filename)`

3> fstab..:

awk和双括号的替代解决方案:

FILENAME=file.txt
SIZE=$(du -sb $FILENAME | awk '{ print $1 }')

if ((SIZE<90000)) ; then 
    echo "less"; 
else 
    echo "not less"; 
fi


@fstab,您可以使用`read`(bash`内部命令)省略`awk`:`read SIZE _ <<< $(du -sb“ $ FILENAME”)`

4> gniourf_gnio..:

如果您find处理此语法,则可以使用它:

find -maxdepth 1 -name "file.txt" -size -90k

file.txt当且仅当大小file.txt小于90k时,这将输出到stdout .要执行一个脚本script,如果file.txt具有比90K以下的尺寸:

find -maxdepth 1 -name "file.txt" -size -90k -exec script \;


+1,但为了使它在OSX上运行,你需要一个明确的目标目录参数,例如:`find.-maxdepth 1 -name"file.txt"-size -90k`

5> BananaNeil..:

如果您只是寻找文件的大小:

$ cat $file | wc -c
> 203233


`wc -c"$ file"`在2011年(三年前)给出了答案.是的,`wc -c"$ file"`有输出文件名和字符数的问题,所以早期答案添加了一个命令来分离计数.但是`WC -c <"$文件"`,它解决了问题,被添加为2014年5月评论你的回答是相当于,除了它增加了一个["无用使用`cat`"(HTTP: //superuser.com/q/323060/354511).此外,除非有充分的理由,否则应引用所有shell变量引用.
是的,但肯定在经济上优越:工程时间成本>计算时间成本

6> Neil McGill..:

这适用于linux和macos

function filesize
{
    local file=$1
    size=`stat -c%s $file 2>/dev/null` # linux
    if [ $? -eq 0 ]
    then
        echo $size
        return 0
    fi

    eval $(stat -s $file) # macos
    if [ $? -eq 0 ]
    then
        echo $st_size
        return 0
    fi

    return -1
}

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有