如何解析 .dat 文件并获取其中声明的 .jar 文件的时间戳和文件大小等模式

如何解析 .dat 文件并获取其中声明的 .jar 文件的时间戳和文件大小等模式

我想比较不同目录中以下 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

相关内容