Чтобы избежать удаления каталога, используйте find /path -delete -mindepth 1.
orodbhen
@orodbhen: find -delete не удалит каталог, в котором вы запускаете команду (как в вопросе с rm).
пользователь неизвестен
11
Лучший ответ: не делай этого. Рекурсивно удалите сам каталог, а затем воссоздайте его как пустой каталог. Другим людям легче и проще понять, что вы пытаетесь сделать. При повторном создании каталога он может иметь другого владельца, группу и разрешения. Если это важно, будьте осторожны. Кроме того, если какие-либо работающие программы имеют открытые файловые дескрипторы (дескрипторы) в каталоге, вы не захотите его удалять. Если ни один из этих особых случаев не применим, тогда проще удалить весь каталог.
Так как же это проще? «Будь осторожен» - это не ответ. Я не понимаю, почему кто-то удаляет каталог и перестраивает его снова.
пользователь неизвестен
Я добавил фразу «как пустой каталог», возможно, это более понятно.
Крис Кнель
2
Нет, это не объясняет, почему вы удаляете каталог и затем воссоздаете его. К вещам, которые нужно учитывать, относится, между прочим, дата / время создания.
неизвестный пользователь
2
Если этот каталог является текущим рабочим каталогом какого-либо процесса, вы можете столкнуться с проблемами. Также, если вы удаляете каталог, вы удаляете информацию о его разрешениях и владении.
8
rm -rf --*.[!.]*..?*
Каждый из трех шаблонов расширяется до самого себя, если он ничего не соответствует, но это не проблема, поскольку мы хотим сопоставить все и rm -fигнорировать несуществующие аргументы.
С включенным dotglob, *расширяется на все файлы и каталоги, даже те, которые начинаются с .- но не расширяются до .и .., так что это безопасно для использования rm.
Скорее всего, проблема заключается в том, что *?*они не будут соответствовать «точечным» файлам / каталогам (если вы не включили dotglobопцию в bash , GLOB_DOTSопцию в zsh или эквивалент для любой используемой вами оболочки).
rm -rf .* *
.rm -rf yourdirectory/*
..
каталогу, который удалит все, что находится в каталоге выше .Ответы:
Просто и прямо:
Включает каталоги и скрытые файлы. По крайней мере, гну-найти знает
-delete
, вашfind
может отличаться.источник
find /path -delete -mindepth 1
.Лучший ответ: не делай этого. Рекурсивно удалите сам каталог, а затем воссоздайте его как пустой каталог. Другим людям легче и проще понять, что вы пытаетесь сделать. При повторном создании каталога он может иметь другого владельца, группу и разрешения. Если это важно, будьте осторожны. Кроме того, если какие-либо работающие программы имеют открытые файловые дескрипторы (дескрипторы) в каталоге, вы не захотите его удалять. Если ни один из этих особых случаев не применим, тогда проще удалить весь каталог.
источник
Каждый из трех шаблонов расширяется до самого себя, если он ничего не соответствует, но это не проблема, поскольку мы хотим сопоставить все и
rm -f
игнорировать несуществующие аргументы.Обратите внимание, что
.*
будет соответствовать..
.источник
Предполагая bash 4+:
С включенным dotglob,
*
расширяется на все файлы и каталоги, даже те, которые начинаются с.
- но не расширяются до.
и..
, так что это безопасно для использованияrm
.источник
если вы находитесь в каталоге:
cd .. && rm -rf dir && mkdir dir && cd dir
иначе:
rm -rf /path/to/dir && mkdir /path/to/dir
источник
Боже мой
Опять же, это только для Zsh.
источник
*(D)
(D
спецификатор glob включаетglob_dots
опцию для этого шаблона).rm -rf {.,}*
( в отличие от Баша, ЗШ не включает в себя.
и..
в{.,}*
, по крайней мере , на моей машине).Как насчет использования
find
. Я думаю, что в целом это хороший выбор, когда нужно копаться в подкаталогах.источник
Попробуй
rm -rf *?*
. Это удалит нормальные и скрытые файлы.источник
*?*
они не будут соответствовать «точечным» файлам / каталогам (если вы не включилиdotglob
опцию в bash ,GLOB_DOTS
опцию в zsh или эквивалент для любой используемой вами оболочки).