Запуск / остановка автоматического монтирования systemd на одной точке монтирования

Если вы ищете, к какому файлу принадлежит определенный атрибут, вы можете использовать awk .

При условии, что ваши файлы csv выглядят так:

$ for i in *.csv; do echo $i; head -n1 $i; echo; done
EVO_ANGLE.csv
"evo_ang_id","angle_description"

EVOP_IMAGE.csv
"evop_image_id","evop_id","evo_ang_id","evo_collection","file_format","image_name","image_path", "image_type"

IMAGE_TYPE.csv
"id","image_type","group","description"

Следующая команда awk меняет местами атрибуты и имя файла:

$ awk -F', *' '                  # field separator = comma and optional spaces
      FNR==1{                    # Parse only the first line of each file.
         for(i=1;i<=NF;i++)             # Loop through all fields, and store them
            a[$i]=a[$i] " " FILENAME    # in an array together with the filename.
      }
      END{                          # When all files parsed, 
         for(i in a) print i,a[i]   # print the content of the array
      }' *.csv
"image_name"  EVOP_IMAGE.csv
"evo_collection"  EVOP_IMAGE.csv
"image_path"  EVOP_IMAGE.csv
"file_format"  EVOP_IMAGE.csv
"image_type"  EVOP_IMAGE.csv IMAGE_TYPE.csv
"evop_id"  EVOP_IMAGE.csv
"evop_image_id"  EVOP_IMAGE.csv
"id"  IMAGE_TYPE.csv
"evo_ang_id"  EVO_ANGLE.csv EVOP_IMAGE.csv
"description"  IMAGE_TYPE.csv
"group"  IMAGE_TYPE.csv
"angle_description"  EVO_ANGLE.csv

Если вам нужно отфильтровать атрибуты, принадлежащие несколько файлов, просто используйте следующее:

$ awk -F', *' 'FNR==1{for(i=1;i<=NF;i++) a[$i]=a[$i] " " FILENAME}END{for(i in a) print i,a[i]}' *.csv | awk 'NF>2'
"image_type"  EVOP_IMAGE.csv IMAGE_TYPE.csv
"evo_ang_id"  EVO_ANGLE.csv EVOP_IMAGE.csv
1
19.11.2017, 15:21
2 ответа

Вот пример, выраженный в оболочке.

MOUNT="/media/backup"
MOUNT_UNIT="$(systemctl show --property=Id "$MOUNT" | sed -e s/^[^=]*=// )"
AUTOMOUNT_UNIT="$(echo "$MOUNT_UNIT" | sed -e s/[.]mount$/.automount/)"
systemctl stop "$AUTOMOUNT_UNIT"

Чтобы попытаться ответить на этот вопрос полностью, вы можете вместо этого использовать systemd-escapeдля генерации имени юнита, как описано в ответе на связанный вопрос.

1
27.01.2020, 23:18

IIRC это было добавлено относительно недавно, но похоже, вы захотите использовать systemd-mount --umount WHERE. Ваша проблема заключается в том, чтобы убедиться, что WHERE передается правильно на выбранном вами языке сценариев :).

Или вы можете использовать обычную команду umount. systemd собирает размонтирование, используя события ядра или что-то в этом роде, поэтому вы не получите вводящий в заблуждение статус соответствующего модуля .automount.

5
27.01.2020, 23:18

Теги

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