다른 디렉토리에 있는 다음 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