配列内の複数のファイルのファイルサイズの比較[閉じる]

配列内の複数のファイルのファイルサイズの比較[閉じる]

シナリオ:Ftpサイトには10​​0個のファイルがあります。 1日に1回、すべての.gzファイルがAWSサイトにコピーされた後、名前が変更されます。ファイル名には日付のみが保持されます。

コピー中に一部のファイルが破損しています。渡されたtxtファイルには、FTPサイトのすべてのファイルと属性のスナップショットが含まれています。

スクリプトを書く必要があります。

  1. .gz ファイルのみを読み取るテキストファイル
  2. S3サイトでファイル名をファイル名に変換
  3. txtファイルのファイルサイズをS3サーバーのファイルサイズと比較する
  4. ファイルサイズが一致しない場合は、ファイル名と差の割合を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。)

関連情報