배열에 있는 여러 파일의 파일 크기 비교 [닫기]

배열에 있는 여러 파일의 파일 크기 비교 [닫기]

시나리오: Ftp 사이트에는 100개의 파일이 있습니다. 하루에 한 번 모든 .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.)

관련 정보