Как сделать так, чтобы команда rm -rf запрашивала подтверждение только один раз на уровне каталога?

Вы можете использовать команду wait:

(echo starting & sleep 10 & wait) && echo done

Вы видите, что строка "start" происходит сразу, а "done" ждет 10 секунд.

3
16.04.2019, 06:30
4 ответа
zsh -c 'rm -f -- **/*(^/)'
rm -ri -- *

Это рекурсивно(**/)удалит все (*), что не является каталогом(^/)с помощью zsh; затем используйте существующую оболочку для интерактивного удаления оставшихся (каталогов ). Чтобы включить точечные файлы в первоначальное удаление, используйте:

zsh -c 'rm -f -- **/*(D^/)'

, затем:

rm -ri -- *
1
27.01.2020, 21:20

В некоторых rmреализациях (DragonFly BSD, FreeBSD и по крайней мере GNU ),-I(заглавная i )— это то, что вам нужно. -iзапрашивает подтверждение для каждого файла, в то время как-I(заглавная буква i )запрашивает подтверждение один раз, когда файлов больше 3 или вы рекурсивно удаляете.

5
27.01.2020, 21:20

Попробуйте это. Что ж, это может быть диким решением, но я все равно хотел поделиться!

function rm_ {
   [[ -d "$1" ]] && rm -rI "$1" || rm -f "$1"
}

Затем используйте rm_ <directory|file>. Если это directory, вы получите rm: remove all arguments recursively?, иначе ничего и файл будет удален.

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

Если нужно было использовать только rm -rI, пользователь получает запрос на подтверждение как для файлов, так и для каталогов, поэтому я использовал комбинацию rm -fи rm -rI.

0
27.01.2020, 21:20

Фрагмент ниже запросит подтверждение один раз, а затем удалит весь каталог'path/to/delete'

  1. Используйте read -p 'question ' answerдля отображения 'question 'пользователю и сохранения ответа в переменной ${answer}. (Завершающий пробел в 'question 'делает подсказку более читаемой)
  2. Используйте тестовое предложение [ ]с оператором равенства строк =, чтобы убедиться, что переменная ${answer}содержит'expected answer'
  3. Используйте оператор и &&, чтобы остановить, если какой-либо из шагов не увенчался успехом -, например. [Ctrl]+[C]был использован для прерывания readили тестовое предложение [ ]было неверным
  4. Прежде чем писатьrm -rf-Придумайте как минимум 42 сценария, в которых что-то может пойти не так. Проведите мозговой штурм, чтобы максимально снизить риск
  5. Когда все вышеперечисленные условия соблюдены, принудительно удалите каталог с помощьюrm -rf
PATH_TO_DELETE='path/to/delete'
read -p "Delete path '${PATH_TO_DELETE}'? [y/N] " yn && [ "${yn}" = 'y' ] && rm -rf "${PATH_TO_DELETE}"
1
15.11.2021, 21:15

Теги

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