Довольно сложный tar на основе измененной даты

Вероятно, вы не включили аутентификацию в Exim (она отключена по умолчанию ), но вы требуете ее в phpmailer.

Удалите требования для TLS и аутентификации из phpmailer.

1
03.11.2021, 11:52
1 ответ

Разделение задачи на куски с использованием вашего ввода

drwxrwxr-x 2 per per 4096 nov  3 12:46 launch01
-rw-rw-r-- 1 per per    0 nov  3 12:47 camera112.log
-rw-rw-r-- 1 per per    0 nov  3 12:47 motors121.log
-rw-rw-r-- 1 per per    0 nov  3 12:47 lidar111.log
drwxrwxr-x 2 per per 4096 nov  3 12:49 launch02
-rw-rw-r-- 1 per per    0 nov  3 12:49 motors122.log
-rw-rw-r-- 1 per per    0 nov  3 12:49 lidar211.log
-rw-rw-r-- 1 per per    0 nov  3 12:49 camera113.log

Создать "упорядоченный" список только имен файлов

Используйте любой из этих:

ls -lrt | tr -s ' ' | cut -d' ' -f9
ls -lrt | awk '{print $9}'

дает:

launch01
camera112.log
motors121.log
lidar111.log
launch02
motors122.log
lidar211.log
camera113.log

Разделите список на разделы

Изменение этого ответа на Разделить один файл на несколько файлов на основе разделителя , создать файл с именем awk_pattern, содержащий следующее:

BEGIN{ fn = "part1.txt"; n = 1 }
{
   if (substr($0,1,6) == "launch") {
       close (fn)
       n++
       fn = "part" n ".txt"
   }
   print > fn
}

, а затем работает

ls -lrt | awk '{print $9}' | awk -f awk_pattern

дает требуемый результат:

part1.txt

launch01

, а затем

part2.txt

launch01
camera112.log
motors121.log
lidar111.log

part3.txt

launch02
motors122.log
lidar211.log
camera113.log

Хотя первый файл(part1.txt)следует отбросить, так как он содержит только одну строку...

rm part1.txt

смолить содержимое каждой части

Из 6.3 Чтение имен из файла

tar -c -v -z -T part2.txt -f part2.tgz

Перебор файлов tar

for part_file in $(ls part*)
do
  tar_file = ${part_file%.*}
#  tar_file = basename ${part_file}.txt
  tar -c -v -z -T ${part_file} -f ${tar_file}.tgz
done

Это должно дать

part1.tgz
part2.tgz
part3.tgz

Опять же, part1.tgzследует отбросить:

rm part1.tgz

Собираем все воедино

#!/bin/bash

ls -lrt | awk '{print $9}' | awk -f awk_pattern

for part_file in $(ls part*)
do
  tar_file = ${part_file%.*}
  tar -c -v -z -T ${part_file} -f ${tar_file}.tgz
done


rm part1.txt
rm part1.tgz

Всего один скрипт (, включающий шаблон awk)

#!/bin/bash

ls -lrt | awk '{print $9}' | awk 'BEGIN{ fn = "part1.txt"; n = 1 }
{
   if (substr($0,1,6) == "launch") {
       close (fn)
       n++
       fn = "part" n ".txt"
   }
   print > fn
}'

for part_file in $(ls part*)
do
  tar_file = ${part_file%.*}
  tar -c -v -z -T ${part_file} -f ${tar_file}.tgz
done

rm part1.txt
rm part1.tgz

Это (надеюсь, что)должно работать, хотя я протестировал только первые два шага, то есть до части tar, так как у меня нет файлов для архивирования.


Возможные улучшения:

  1. Пост-обработка -:Удаление файлов part*.txt(rm part*.txt)

  2. Пост--обработка:Удаление файлов журналов после архивирования(rm *.log)

  3. Пост--обработка:Удаление каталогов после архивации(rm -R -- */)

    См. ответ на Как удалить все подкаталоги -из каталога? .

  4. Предотвращение создания awk бесполезного part1.txtфайла

  5. Сохраните файлы tar в другом месте(... -f ${tar_path}/${tar_file}.tgz)

  6. Не используйте промежуточные part*.txtфайлы.

1
04.11.2021, 10:14

Теги

Похожие вопросы