Ни за что. прошу прощения. Вы не могли сделать условного списка deps в об/мин. Единственный способ сделать это должно удалить весь дистрибутив определенный deps из Вашего файла спецификации.
Я придерживался бы двух отдельных команд:
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" &
}
Вы пропускаете воссоздание "$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 остается в той же файловой системе для предотвращения скопированных данных
clean_old_now
) это не хорошая идея использовать [
команда, не заключая переменные в кавычки, и ==
делает это непортативным, ничего не получая. Я заключаю, что это - удар, поэтому если Вы хотите отредактировать его для использования [[
ключевое слово или кавычка, Вар и избавляется от дополнительного, равняются знаку, я могу +1 это.
– kojiro
05.01.2012, 14:54
Очень прагматический подход должен был бы переместить каталог в/tmp и позволить перезагрузке машины сделать остальных. Или установите cronjob, который моется периодически (раз в час).
mv "$oldname" /tmp/forgetme
И как cronjob
0 * * * * rm -rf /tmp/forgetme
/tmp
находится в той же файловой системе как "$oldname". Если это не так это было бы очень медленно.
– kojiro
05.01.2012, 17:35