Создание папок .spam в учетной записи каждого почтового пользователя

Вы не можете вернуться от ./mycommand.sh $MYOPT к значению MYOPT.Вот почему вы не нашли способ сделать это: это невозможно. mycommand.sh не получает достаточно информации для восстановления исходного значения.

Например, если значение MYOPT равно *, то mycommand.sh вызывается со списком имен файлов в текущем каталоге. У него нет возможности узнать, как был составлен этот список.

Если вы знаете, что значение MYOPT соответствует определенным правилам, вы сможете восстановить его. Простая версия этих правил такова:

  • Значение не содержит ни одного из символов \[*? или табуляции или новой строки.
  • Значение не начинается и не заканчивается пробелом и не содержит последовательных пробелов.

При этих предположениях "$*" в mycommand.sh даст вам значение MYOPT. Но имейте в виду, что это не может работать в целом.

Правильным решением будет исправить вашу среду. На языке оболочки $MYOPT не означает «взять значение MYOPT», это означает «взять значение MYOPT, разделить его в соответствии с значение IFS и обрабатывать каждую результирующую часть как подстановочный шаблон, который расширяется, если он соответствует хотя бы одному файлу». Способ написать «взять значение MYOPT» — это "$MYOPT", или, в более общем смысле, использовать $MYOPT в двойных кавычках.

0
13.04.2017, 15:36
1 ответ

Вы не можете создать каталог с помощью touch , используйте для этого mkdir :

mkdir -p "$HOME"/mail/.sa-learn/{cur,new,tmp}

Флаг -p сообщает mkdir для создания всех промежуточных папок, если они не существуют, и не будет ошибкой попытаться создать папку, которая уже существует.

Предполагается, что оболочка выполняет расширение скобок. В противном случае разбейте его на три отдельных вызова mkdir .

При перемещении почты (непроверенной):

find "$HOME"/mail -type f -path "*/.spam/*" -print0 |
xargs -0 -I XX mv "XX" "$HOME"/mail/.sa-learn/new/

Это позволит найти всю почту (новую или старую) в любой папке .spam в папке $ HOME / mail и переместить их в папку .sa-learn / new папка.

Я использую «$ HOME» , а не ~ в скриптах, потому что мне кажется, что он выглядит лучше, самодокументируется и ведет себя как любая другая переменная ( ~ нет).

3
28.01.2020, 02:25

Теги

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