Добавить имя папки ($date) в начало журнала, затем вырезать строку 21 из того же журнала и добавить в качестве значения в работающем скрипте

Даже если мне нравится чистый ответ udev, есть также инструмент под названием usbmount, который вы можете установить

apt-get install usbmount

который автоматически монтирует диски и довольно просто настраивается через файл конфигурации.
Я предпочитаю вообще не использовать автомонтирование, но некоторые клиенты просят об этом.

0
26.07.2019, 23:33
1 ответ

У вас есть четыре вещи, которые вы пытаетесь выполнить :1 )вставка строки в начало файла, 2 )чтение определенной строки файла, 3 )условное ветвление, если это конкретной строки не существует, и 4 )удаление определенной строки файла.

Вы можете использовать утилиту редактора потоков sed, чтобы сделать все это. Я предполагаю, что GNU sedв своем ответе, но точный синтаксис может немного отличаться от других версий sed.

Чтобы вставить строку в начало файла:

sed -i "1i\${date}" ${oldlog}

Опция -iуказывает sedработать с файлом на месте. 1указывает sedработать только с первой строкой. i\говорит sedвставить перед строкой.

Для извлечения 21-й строки:

del="$(sed -n 21p "${oldlog}")"

-nпереводит sedтолько в тихий режим, поэтому единственным выводом является то, что явно напечатано. 21— номер строки, а p— команда печати.

Чтобы определить, есть ли 21-я строка:

sed -n 21q1 ${oldlog}

Снова -nпереводит sed в тихий режим, 21выбирает 21-ю строку, qуказывает sed выйти, а 1является кодом выхода.

Удаление 21-й строки:

sed -i 21d ${oldlog}

Опять же, -iдля работы с файлом на месте, 21выбирает строку 21 и dудаляет строку.

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

sed -i "1i\${date}" ${oldlog}
del="$(sed -n 21p "${oldlog}")"
sed -n 21q1 ${oldlog} || { echo "Deleting ${dest}/old/${del}" && rclone purge "${dest}/old/${del}" && sed -i 21d ${oldlog} }
0
28.01.2020, 03:25

Теги

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