Назад | Перейти на главную страницу

rm -rf до успеха

У меня есть сценарий развертывания, который удаляет все файлы в папке tmp перед продолжением, но иногда во время развертывания процесс будет использовать один из файлов tmp, делая rmкоманда не работает. Так выглядит мой сценарий

rm -rf app/tmp
tar -xf app.tar

Это чрезмерное упрощение того, что происходит, пожалуйста, не пытайтесь предлагать улучшить процесс развертывания, это строго вопрос о rm команда

Я думаю о чем-то вроде

# pseudo code
while [[ ! rm -rf app/tmp ]]; do sleep 1; done
tar -xf app.tar

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

Вы знаете синтаксис, который позволил бы это в bash?

В настоящее время сценарий не работает и никогда не извлекает файлы tar.

Спасибо за ваш вклад.

Похоже, я нашел ответ в другом вопросе: "Как можно запустить команду в bash до успеха"

https://stackoverflow.com/a/5274386/2296642

Я должен использовать until синтаксис.

until rm -rf app/tmp; do echo trying again; done
tar -xf app.tar

В while цикл ничего не сравнивает. Он должен на чем-то совпадать; в этом случае мы хотим знать, существует ли каталог. Если он существует, удалите его с помощью rm, в противном случае, если не существует, выйдите из цикла и запустите tar команда. Вы не хотите использовать rm команда внутри while состояние.

# pseudo code
while [[ -d app/tmp ]]; do rm -rf app/tmp; sleep 1; done
tar -xf app.tar