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