シナリオ:Ftpサイトには100個のファイルがあります。 1日に1回、すべての.gzファイルがAWSサイトにコピーされた後、名前が変更されます。ファイル名には日付のみが保持されます。
コピー中に一部のファイルが破損しています。渡されたtxtファイルには、FTPサイトのすべてのファイルと属性のスナップショットが含まれています。
スクリプトを書く必要があります。
- .gz ファイルのみを読み取るテキストファイル
- S3サイトでファイル名をファイル名に変換
- txtファイルのファイルサイズをS3サーバーのファイルサイズと比較する
- ファイルサイズが一致しない場合は、ファイル名と差の割合をtxtファイルに書き込みます。
これまで私が持っているのは次のとおりです。まだ仕事に近いわけではありません。
提案? :
# Create array from files in FTP site text file
f=cat ftpfiles.txt | grep .gz | awk '{print $9,$5}' #this doesn't work
# Start ForEach loop for files in created array
for f in *.gz
do
# Create variable for file size of source file
file1size=$( cat $f | wc -c )
# Create variable for file size of destination file
fiesize2=aws s3 ls s3://folder1/folder2/$f | awk '{print $3}'
#Compare sizes and print result to .txt file by percent diff
echo "$f"
if [ $file1size -lt $file2size ]; then
size=$file1size
else
size=$file2size
fi
dc -e "
3k
$( cmp -n $size -l $file1 $file2 | wc -l )
$size
/
100*
p"
#close loop
done
答え1
変化
f=cat ftpfiles.txt | grep .gz | awk '{print $9,$5}'
到着する:
f=`cat ftpfiles.txt | grep .gz | awk '{print $9,$5}'`
これにより、スクリプトの「機能しない」部分が修正されます。
変更:
fiesize2=aws s3 ls s3://folder1/folder2/$f | awk '{print $3}'
到着
file2size=`aws s3 ls s3://folder1/folder2/$f | awk '{print $3}'`
(引用符に加えて、元の変数名がここで無効です。fiesize2
と比較してくださいfile2size
。)