Ярлык для быстрого рекурсивного удаления

Ни за что. прошу прощения. Вы не могли сделать условного списка deps в об/мин. Единственный способ сделать это должно удалить весь дистрибутив определенный deps из Вашего файла спецификации.

5
04.01.2012, 17:20
3 ответа

Я придерживался бы двух отдельных команд:

mv "$oldname" dienow
rm -rf dienow

Таким образом, если Вы случайно вспоминаете строку из своей истории, Вы не рискуете наносить главный ущерб путем выполнения единственной команды. mv команда не удаляет "$oldname" даже если это - новая версия, и rm команда только удаляет что-то, что Вы уже объявили, как удалено будущим образом.

Если Вы чувствуете себя удачливыми и настаиваете на единственной команде, сделайте ее функцией:

mv_then_rm () {
  mv -- "$1" "$1.TO_BE_DELETED" && rm -rf -- "$1.TO_BE_DELETED" &
}

Вот версия мультипараметра, которая удостоверяется, “чтобы быть удаленной” каталог еще, не существует.

mv_then_rm () {
  local d tmpdir tmpdirs
  tmpdirs=()
  for d; do
    tmpdir=$(mktemp -- "$(dirname -- "$d")/.deleting.XXXXXXXXXX")
    tmpdirs+=$tmpdir
    mv -- "$d" "$tmpdir"
  done
  rm -rf -- "$tmpdirs" &
}
4
27.01.2020, 20:39

Вы пропускаете воссоздание "$oldname".

mv "$oldname" dienow && mkdir "$oldname" && \rm -rf dienow &

Я предпочитаю использовать \rm на всякий случай чья-то искаженная комната к чему-то как комната-i

Сделайте свои пути явными и добавьте как функция для профилирования

clean_old_now(){
  \mv "$oldname" dienow && mkdir "$oldname" && \rm -rf dienow &
}

Если Вы волнуетесь по поводу выполнения, это случайно добавляет подсказку

clean_old_now(){
  read -p "Are you sure?: " sure
  if [[ $? = 0 ]] && [[ "$sure" = "y" ]]; then
    \mv "$workdir/$oldname" $workdir/dienow && mkdir "$workdir/$oldname" && \rm -rf $workdir/dienow &
  fi
}

Когда добавление явных путей удостоверяется, что mv остается в той же файловой системе для предотвращения скопированных данных

2
27.01.2020, 20:39
  • 1
    Хорошая идея о подсказке; однако, я должен указать на это (в clean_old_now) это не хорошая идея использовать [ команда, не заключая переменные в кавычки, и == делает это непортативным, ничего не получая. Я заключаю, что это - удар, поэтому если Вы хотите отредактировать его для использования [[ ключевое слово или кавычка, Вар и избавляется от дополнительного, равняются знаку, я могу +1 это. –  kojiro 05.01.2012, 14:54
  • 2
    сделан. Можно украсить столько сколько требуемый. $sure мог быть сделан локальным, тесты за устанавливаемый $workdir$oldname, и т.д. просто пытаясь придерживаться краткости на данный момент. Лично я добавил бы, что-v переключается на mv и mkdir –  bsd 05.01.2012, 15:11
  • 3
    , который я изменил || на &&, удивил, никто не поймал это, сам включенный –  bsd 06.01.2012, 14:32

Очень прагматический подход должен был бы переместить каталог в/tmp и позволить перезагрузке машины сделать остальных. Или установите cronjob, который моется периодически (раз в час).

mv "$oldname" /tmp/forgetme

И как cronjob

0 * * * * rm -rf /tmp/forgetme
0
27.01.2020, 20:39
  • 1
    Это принимает /tmp находится в той же файловой системе как "$oldname". Если это не так это было бы очень медленно. –  kojiro 05.01.2012, 17:35
  • 2
    ! Вы правы, я не думал об этом. –  ddeimeke 05.01.2012, 18:44

Теги

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