我想比较不同目录中以下 jar 文件的大小和时间戳。
第一个数据是通过以下方式获取的:
grep -Eo "[[:digit:]]+[[:space:]]+[[:digit:]]+.[[:digit:]]+.[[:digit:]]+[[:space:]]+[[:digit:]]+.[[:digit:]]+.[[:digit:]]+[[:space:]]+.*?test1.jar" Sample.dat
输出 1 是这样的:
29003 2015-04-24 15:56:16 XYZ_jar/java7/test1.jar
第二个数据是通过以下方式获取的:
cd /dir1/foo/xyz/java7
stat test1.jar
输出2是这样的:
File: `test1.jar'
Size: 29003 Blocks: 64 IO Block: 1234 regular file
Device: ab12c/34567d Inode: 1234567 Links: 1
Access: (0123/-rwxr-xr--) Uid: (123456/foo) Gid: ( 1234/ fooooo)
Access: 2015-06-01 04:00:03.000000000 -0500
Modify: 2015-04-24 15:56:16.000000000 -0500
Change: 2015-06-01 00:13:01.000000000 -0500
我需要将 Output 1 的大小和时间戳(分别为 29003 和 2015-04-24 15:56:16)与 Output 2 的大小和修改日期(即 29003 和修改:2015-04-24 15)进行比较:分别为 56:16.000000000 -0500。
基于答案的当前代码/脚本:
cd /dir1/foo
output1=$( grep -Eo "[[:digit:]]+[[:space:]]+[[:digit:]]+.[[:digit:]]+.[[:digit:]]+[[:space:]]+[[:digit:]]+.[[:digit:]]+.[[:digit:]]+[[:space:]]+.*?test1.jar" Sample.dat )
cd /dir1/foo/xyz/java7
size=$( stat -c "%s" $test1.jar )
refdate=$( awk '{print $4}' <<< "$output1" )
modt=$( stat -c "%y" yourfile2 | awk '{print $1}' )
print $refdate
print $size
print $modt
if [[ "$modt" == "$refdate" ]]
then echo equal date
else echo different date
fi
答案1
您可以使用格式说明符来stat
获取特定信息:
stat -c "%s %Y" yourfile
单独分配以供以后比较:
size=$( stat -c "%s" yourfile )
modt=$( stat -c "%Y" yourfile )
要比较两个文件的属性,您可以使用,例如:
size1=$( stat -c "%s" yourfile1 )
size2=$( stat -c "%s" yourfile2 )
if [[ $size1 == $size2 ]]
then echo equal size
else echo different size
fi
这也可以内联完成;使用算术命令它是:
if (( $( stat -c "%s" yourfile1 ) == $( stat -c "%s" yourfile2 ) ))
then echo equal size
else echo different size
fi
要与字段 4 中包含 ISO 日期的字符串进行比较,您需要stat -c "%y"
,例如:
refdate=$( awk '{print $4}' <<< "${output1}" )
modt=$( stat -c "%y" yourfile2 | awk '{print $1}' )
if [[ "$modt" == "$refdate" ]]
then echo equal date
else echo different date
fi