场景: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
)