Безопасный способ расширения раздела XFS

Если uFiles заканчивается строкой foo bar qux , то последняя строка выполняет команду (foo с аргументами bar и qux) . В результате появляется сообщение об ошибке (foo: command not found (или подобное), а mail получает пустой ввод.

Это не единственная проблема со сценарием. Команда которая создает переменную uFiles , совсем не то, что вы думаете. Запустите bash -x / path / to / script , чтобы увидеть след сценария, это ' Я дам вам представление о том, что происходит. Вы echo вводите команду uuencode вместо того, чтобы запускать ее. Вам не нужно echo там:

  uFiles="$uFiles
  $(uuencode "$fil" "$fil")"

Это заставит цикл работать, но он хрупкий; в частности, он будет нарушать имена файлов, содержащие пробелы и другие специальные символы (см. Почему мой сценарий оболочки подавляется пробелами или другими специальными символами? для получения дополнительной информации (объяснения) .Парсинг вывода find редко бывает самым простым способом что-то сделать.Вместо этого скажите find выполнить команду, которую вы хотите выполнить.

find "$dir" -ctime -2 -type f -name "Sum*pdf*" -exec uuencode {} {} \;

Результатом является конкатенация файлов с кодировкой uuencoded, которые вы пытались построить. Вы можете передать его в качестве входных данных напрямую в mail :

find "$dir" -ctime -2 -type f -name "Sum*pdf*" -exec uuencode {} {} \; |
mailx -s "subject" abc@gmail.com

Если вы хотите обнаружить потенциальные сбои шага uuencode, вы можете поместить его в переменную (но помните, что она может быть очень большой):

attachments=$(find "$dir" -ctime -2 -type f -name "Sum*pdf*" -exec uuencode {} {} \;)
if [ $? -ne 0 ]; then
  echo 1>&2 "Error while encoding attachments, aborting."
  exit 2
fi
if [ -z "$attachments" ]; then
  echo 1>&2 "Notice: no files to attach, so mail not sent."
  exit 0
fi
echo "$attachments" | mailx -s "subject" abc@gmail.com

В качестве альтернативы можно написать временный файл.

attachments=
trap 'rm -f "$attachments"' EXIT HUP INT TERM
attachments=$(mktemp)
find "$dir" -ctime -2 -type f -name "Sum*pdf*" -exec uuencode {} {} \; >"$attachments"
if [ $? -ne 0 ]; then
  echo 1>&2 "Error while encoding attachments, aborting."
  exit 2
fi
if ! [ -s "$attachments" ]; then
  echo 1>&2 "Notice: no files to attach, so mail not sent."
  exit 0
fi
mailx -s "subject" abc@gmail.com <"$attachments"

1
05.12.2018, 15:21
1 ответ

Я вижу два возможных пути разрешения вашего дела :Если вы можете создавать резервные копии файлов на внешнем хранилище:

  1. уничтожить файловую систему
  2. создать выделенную группу томов
  3. создать весь диск /dev/sdgкак PV:pvcreate /dev/sdg
  4. добавить PV в VG
  5. создать LV
  6. создать файловую систему на LV
  7. восстановить файлы

    Если у вас нет места для резервного копирования файлов (здесь начните с шага 1, а не с 8, нумерация в SE работает плохо)

  8. создать два раздела /dev/sdg2и /dev/sdg3в конец диска

  9. создать ВГ

  10. создать PV на разделах

  11. добавить PV в VG

  12. создать LV

  13. создать файловую систему на этом LV

  14. смонтировать этот LV

  15. скопировать файлы в новую файловую систему

  16. размонтировать/dev/sdg1

  17. создать на /dev/sdg1PV

  18. добавить PV в VG

  19. расширить LV до полного размера VG

0
28.01.2020, 00:22

Теги

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