Сравните размер файла нескольких файлов в массиве

Сценарий: на сайте 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 

  • Скрипты на несколько серверов одновременно
  • Вставить
  • Как запустить программу в фоновом режиме
  • Что означает выражение $ (<"dir / file") в bash?
  • Как запустить скрипт bash из сценария sh (dash)?
  • Чтение пространства в качестве входного файла в сценарии оболочки
  • Создание нескольких каталогов с использованием параметра в сценарии оболочки
  • как отключить ожидание «нажмите enter» после выполнения сценария bash над cron
  • One Solution collect form web for “Сравните размер файла нескольких файлов в массиве”

    + Изменить

     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 )

    Linux и Unix - лучшая ОС в мире.