Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 比较shell脚本中的文件大小_Linux_Shell_Sh - Fatal编程技术网

Linux 比较shell脚本中的文件大小

Linux 比较shell脚本中的文件大小,linux,shell,sh,Linux,Shell,Sh,我试图在shell脚本中比较两个文件的大小,但得到一个测试:32:8:意外运算符错误 I=`wc -c $i | cut -d' ' -f1` J=`wc -c $j | cut -d' ' -f1` if test $I == $J then echo $i $j >> $1.pares fi 我使用echo测试$I和$J中的值,这些值是正确的,但我无法比较它们…尝试使用方括号([])和-eq,如下所示: I=`wc -c $i | cut -d' ' -f1` J=

我试图在shell脚本中比较两个文件的大小,但得到一个测试:32:8:意外运算符错误

I=`wc -c $i | cut -d' ' -f1`
J=`wc -c $j | cut -d' ' -f1`
if test $I == $J
then
      echo $i $j >> $1.pares
fi
我使用echo测试$I和$J中的值,这些值是正确的,但我无法比较它们…

尝试使用方括号(
[]
)和
-eq
,如下所示:

I=`wc -c $i | cut -d' ' -f1`
J=`wc -c $j | cut -d' ' -f1`
if [ $I -eq $J ]
then
      echo $i $j >> $1.pares
fi
这在bash上有效

if((`stat -c%s "$file1"`==`stat -c%s "$file2"`));then
  echo "do something"
fi
试一试

始终引用变量,因为可以使用包含空格的文件名


尽管BASH对变量名不区分大小写,但对变量使用不同的(并且比一个字符长)名称更好、更安全。

类似的方法可能会奏效

#/bin/bash <br>
I=`wc -c < echo $i`
J=`wc -c < echo $j`

if [ $I -eq $J ]; then

 echo $i $j >> $1.pares

fi
#/bin/bash
I=`wc-c>$1.pares fi

拥抱

尝试
-eq
而不是
=
如果[$I-eq$J];然后…
我刚刚尝试了=而不是==并且成功了,-eq也成功了如果您只需要文件大小,请避免使用
cat foobar | wc-c
,因为它将从磁盘(或从远程位置,或从任何地方)读取整个文件。对于较大的文件来说,这只是浪费时间。喜欢使用
wc-cfoobar
。是的,这是真的:)我现在知道这一点,但在我写答案时不知道这一点。如果你想知道的话,
wc
的这种合理优化至少在1992年首次提交给coreutils时就已经存在了:我更愿意
stat-c“%s”
来获得文件的大小
wc
是一个很好的计算行数的工具。IIRC,
==
是一个bash扩展,用于bash数值表达式:
(($I==$J))
欢迎使用堆栈溢出!请将开头的句子翻译成英语,并试着解释它为什么有效(以及为什么问题中的代码不起作用)。在Mac上,这会返回
stat:invalize option--c用法:stat[-FlLnqrsx][f format][t timefmt][file…]
@LOlliffe如果我没有错,请将-c改为-f,问题是在linux上,f意味着——文件系统。如果你愿意的话,可以编辑我的答案,在你使用mac操作系统后,随意添加一个备选方案:)@AquariusPower
stat-f file.ext
只需在macOS上打印文件名
fiel.ext
。要在macOS上获取以字节为单位的文件大小,请使用
stat-f%z file.ext
。现在(2021年),我认为
$()
是首选的反引号,因为很容易看到结束分隔符。
#/bin/bash <br>
I=`wc -c < echo $i`
J=`wc -c < echo $j`

if [ $I -eq $J ]; then

 echo $i $j >> $1.pares

fi