比较数组中多个文件的文件大小

比较数组中多个文件的文件大小

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

相关内容