Недостаток в том, что вы используете автоматическое принудительное удаление каталога - и, конечно, для удаления его содержимого вам потребуется автоматическое принудительное рекурсивное удаление каталога. Вы открываете дыры в безопасности в своем сценарии.
Например, проверьте - флаг одной файловой системы
для rm
. Вероятно, вы не захотите удалять все файлы в любых файловых системах, смонтированных в mydir
... поэтому вам придется включить этот флаг (который, кстати, не имеет аббревиатуры).
А как насчет привязных креплений? (См. man mount
и найдите bind
.) Технически это будут файлы в одной файловой системе ... как rm -rf
их обработает? Удалит ли он их все? Вероятно, это не то, что вы хотели, но чтобы быть уверенным, вам придется изучить это и протестировать поведение rm
по отношению к привязанным креплениям. Вероятно, есть много других крайних случаев, о которых я не думал.
Все эти проблемы возникают из-за того, что вы на самом деле не хотите «удалять каталог и его содержимое»; на самом деле вы хотите, чтобы имел пустой каталог для работы.
Здесь есть общий принцип: когда вы указываете что-то другое , отличное от того, что вы конкретно хотите, потому что вы думаете, что это путь к получению того, что вы хотите, вы обычно вносите ненужную сложность. Что нужно сделать, это найти, как указать то, что вы хотите , а затем указать это явно. *
Лучшее решение, как Джефф Шаллер уже указал в комментариях, - использовать mktemp
, который собственно и предназначен для этой цели. В частности, из man mktemp
:
Create a temporary file or directory, safely, and print its name.
Простейшее использование mktemp
для создания каталога будет выглядеть так:
mydir="$(mktemp -d)"
Затем вы можете скопировать в него файл следующим образом:
cp somefile "$mydir/"
В конце вашего скрипта, когда вы закончите с каталогом, вы можете безопасно удалить его (и все, что вы в него поместили), используя:
rm -rf "$mydir"
* Другой пример этот принцип заключается в использовании команд sed
для обработки файлов на основе полей или столбцов. Возможно, вы сможете это сделать ... но вы можете указать именно то, что вы хотите, используя awk
, и с гораздо меньшей сложностью.
У меня была такая же проблема, и это оказалось одним из драйверов. С другой версией заработало. Хотя мне не удалось войти в настройки принтера из управления печатью окон, чтобы установить тип печати по умолчанию и двустороннюю -
Вы написали с ошибкой wirteable = yes
, должно быть writeable = yes
, возможно, это могло бы исправить это. Но это дикая догадка, я просто случайно наткнулся.
Кроме того, testparm /etc/samba/smb.conf
— ваш друг, когда вам нужно проверить наличие несоответствий в файле smb.conf
.