別のディレクトリにある次の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
2番目のデータは次のように取得されます。
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