在 Bash 中检查两个文件的大小是不是不同
Posted
技术标签:
【中文标题】在 Bash 中检查两个文件的大小是不是不同【英文标题】:Check if two files are different sizes in Bash在 Bash 中检查两个文件的大小是否不同 【发布时间】:2014-04-28 03:03:31 【问题描述】:我在这里找不到这个问题。如何在 Bash 中比较两个文件的文件大小,然后仅当两个文件大小不同时才执行某些操作?
【问题讨论】:
【参考方案1】:补充@Steve Bennett 的有用回答:
stat
选项确实因平台而异;似乎 POSIX 标准并没有强制要求 stat
实用程序(只是一个库函数)。
这是一个bash
函数,适用于Linux和BSD衍生的操作系统,包括OSX:
# SYNOPSIS
# fileSize file ...
# DESCRIPTION
# Returns the size of the specified file(s) in bytes, with each file's
# size on a separate output line.
fileSize()
local optChar='c' fmtString='%s'
[[ $(uname) =~ Darwin|BSD ]] && optChar='f'; fmtString='%z';
stat -$optChar "$fmtString" "$@"
使用示例:
if (( $(fileSize FILE1.txt) != $(fileSize FILE2.txt) )); then
echo "They're different."
fi
【讨论】:
是的,不幸的是,stat
不是 POSIX(例如 Solaris 没有它),因此非常难以移植。确定文件大小的唯一可移植方法是使用wc -c
,不幸的是,它可能会读取整个文件。如果[FILE]
是常规文件,coreutils
实现会使用fstat()
对此进行优化(busybox
也曾这样做,但因为它显然已损坏而放弃了它)。另一种选择是使用find
的-printf
功能,但这也特定于GNU find
(但可能在没有stat
的平台上可用)。 YMMV。【参考方案2】:
Bash 似乎没有内置此功能,但您可以使用 stat
。
if [ $(stat -c %s FILE1.txt) -ne $(stat -c %s FILE2.txt) ]; then
echo "They're different."
fi
stat
的确切参数可能因操作系统而异。
【讨论】:
以上是关于在 Bash 中检查两个文件的大小是不是不同的主要内容,如果未能解决你的问题,请参考以下文章