.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

출력 1의 크기 및 타임스탬프(각각 29003 및 2015-04-24 15:56:16)를 출력 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

관련 정보