Безопасное удаление каталога только в том случае, если он НЕ ЯВЛЯЕТСЯ точкой монтирования

Использовать пустые строки в качестве разделителя записей.

Если строка соответствует «1», сохранить последнее поле.

Распечатать последнюю строку без последнего символа и распечатать сохраненное поле.

awk 'BEGIN {RS = ""}
     { if ($0 ~/ "1", /) { serial=$NF } }
     END { print substr($0, 1, length($0)-1) ; print "SN: " serial }' file
1
27.09.2017, 02:45
3 ответа

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

$ sudo mv /mnt /mnt.old
mv: cannot move '/mnt' to '/mnt.old': Device or resource busy

Если это обычный каталог, вы должны иметь возможность переименовать его.

$ sudo mv /mnt /mnt.old

Если перемещение прошло успешно, повторно -создайте каталог монтирования и удалите переименованный каталог. При желании вы можете проверить, является ли переименованный каталог частью файловой системы, которую вы ожидаете, перед удалением.

5
27.01.2020, 23:18

Если вы используете Linux

Вы можете проверить, является ли каталог точкой монтирования, используяmountpoint.

Чтобы избежать появления/исчезновения точки монтирования между test и rm -r, вам необходимо запустить скрипт в отдельномпространстве имен монтированиясприватным поддеревом(монтирования не распространяются из/в новое пространство имен ). Это можно сделать с помощью unshare.

unshare -m --propagation private -- "<delete script>"

Все одним шрифтом:

#!/bin/sh

unshare -m --propagation private -- sh -e <<EOF

if ! mountpoint -q "<path>"; then
    rm -r "<path>"
fi

EOF
1
27.01.2020, 23:18

Вы не можете rmdirкаталог, который не пуст или является точкой монтирования. Так что это удовлетворит ваше требование:

rm -f mountpoint/.autodiskmounted    # MacOS cookie
rmdir mountpoint 2>/dev/null

Если вы работаете в сценарии с установленным выходом при ошибке , вы можете использовать rmdir... || true. (Обратите внимание, что от --ignore-fail-on-non-emptyмало толку, потому что мы получим необработанную ошибку при попытке удалить точку монтирования.)

Должен отметить, что у меня нет доступа к системе Mac, поэтому я не могу проверить, присутствует ли файл .autodiskmounted, когда файловая система действительно смонтирована, или он является заполнителем, когда файловая система размонтирована.

0
27.01.2020, 23:18

Теги

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