Вы не можете создать каталог с помощью 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»
, а не ~
в скриптах, потому что мне кажется, что он выглядит лучше, самодокументируется и ведет себя как любая другая переменная ( ~
нет).
Если вы собираетесь использовать этот скрипт / var на своем компьютере, имя устройства будет все время одинаковым. Таким образом, вы можете просто сделать
$ xinput list --id-only "SynPS/2 Synaptics TouchPad"
#Output:
12
, чтобы сохранить его в переменной:
$ var=$(xinput list --id-only "SynPS/2 Synaptics TouchPad")
device_id=$(xinput | sed -n 's/.*TouchPad.*id=\([0-9]*\).*/\1/p')
См. другой ответ для описания распространенной идиомы sed
.
Вам не нужно получать числовой идентификатор устройства, вы можете использовать строку напрямую. Используйте список xinput --name-only | grep Touchpad
для вывода списка имен устройств, содержащих слово «Touchpad», по одному в каждой строке.
Если вам нужен числовой идентификатор, снова вызовите xinput list
, на этот раз с - только id
.
name=$(xinput list --name-only | grep Touchpad)
nl='
'
case "$name" in
*"$nl"*) echo "Multiple touchpad devices found, aborting"; exit 2;;
"") echo "No touchpad device found, aborting"; exit 2;;
esac
id=$(xinput list --id-only "$name")
Прямой, если не самый эффективный, способ:
deviceid="$(xinput | grep "TouchPad" | grep -oE 'id=[^ ]+' | cut -d= -f2)"
Затем вы можете ссылаться на "$deviceid"
в вашем скрипте(ах).
Чтобы увидеть, как это работает, я сначала выполняю команду, с которой вы начали, чтобы получить строку ввода для разбора. Затем я использую grep -o
, который возвращает только совпавшие данные, а не всю строку, и -E
, который позволяет использовать более лаконичный синтаксис. Выражение /id=[^ ]+/
означает "i
, d
, символ =
и один или несколько символов, которые не являются пробелом. В результате извлекается id=12
. Затем я отправляю это в cut
, которому я говорю разделить вход на =
символов (с помощью переключателя -d
(для dэлиминатора)) и взять второе поле, которое является 12
, как вы хотели.
Все это выполняется во вложенной оболочке, вывод которой используется в качестве значения переменной.