Чтобы удалить все в каталоге, не удаляя каталог, введите:
rm -rfv dontDeleteMe/*
Обратите внимание, /*
часть очень важна. Если вы поставите пробел перед *
, он удалит все ваши файлы в вашем текущем каталоге.
Кроме того , будьте очень осторожны , играя с rm
, -r
и *
все в одной команде. Они могут быть катастрофической комбинацией.
Обновление: Хорошо, я понял, что если у вас есть скрытые / точечные файлы [имена файлов с точками в начале, ex .hidden
], то это оставит эти файлы без изменений.
На самом деле, самое простое решение исходного вопроса :
rm -rfv dontDeleteMe && mkdir dontDeleteMe
Еще один будет использовать find
«s -exec
варианта или трубу , xargs
(ниже):
find dontDeleteMe/* -print0 | xargs -0 rm -rv
find dontDeleteMe/* -print0 | xargs -0 rm -rv
я считаю, что в большинстве случаев это будет работать, независимо от пробелов, а что нет. Но перейдите/tmp/
и создайте тестовый каталог и попробуйте его. :)rm -rf dontDeleteMe && mkdir dontDeleteMe
не гарантирует повторное создание каталога с теми же разрешениями / владельцем (-ями). Вместо этого используйте один изfind dontDeleteMe/ -mindepth 1 -delete
вариантов ниже.Единственная причина
rm -r ./*
не всегда работает, потому что вы можете иметь скрытые файлы и / или папки, которые не соответствуют*
.Для этого
bash
предоставьте возможность*
сопоставлять все, даже скрытые объекты:Может быть полезно сбросить
dotglob
его в состояние по умолчанию (unset), если вы продолжаете использовать оболочку, в которой вы выполняли вышеуказанные команды:источник
Откройте терминал ( Ctrl+ Alt+ T) и введите:
Это будет соответствовать всем файлам и каталогам внутри
somedir
и его дочернимsomedir
элементам-mindepth 1
, включая «скрытые» файлы точек, но исключая себя из-за-delete
них.источник
Используйте
xdev
опцию для удаления файлов только в пределах границ устройства.источник
-delete
. Это подразумевает-depth
и легче запомнить, чем-depth -exec rm -Rf {} \;
Чтобы удалить (в терминале) все файлы и подкаталоги, кроме базового каталога с именем "dontdelete":
источник
Вы можете использовать
find
с-delete
флагом:find dontDeleteMe/* -delete
Это
/*
важно, так как он говоритfind
искать только внутри папки с именем "dontDeleteMe".Также убедитесь, что
-delete
флаг находится в концеfind
команды.источник
dotglob
. В противном случае использование-mindepth 1
опции флага кажется единственным способом заставить его работать.Что говорит:
Удалить все файлы, начиная с. в "каталоге" и всех других файлах тоже.
Хотя, как любезно отметил Нефтас, это решение небезопасно!
Более безопасное решение:
источник
.
и..
каталоги. Этого можно избежать, изменив{.*}
на{.??*}
, но тогда вы не удалите скрытые файлы только с одним символом, например.a
.Я не уверен, почему это так сложно, помогите мне, если я ошибаюсь
это оно
источник
Есть еще более простой ответ:
cd dontDeleteMe
rm -rf *
Время лекций по базовому системному администрированию. Обязательно обращайте внимание на то, где вы находитесь, когда используете такие развернутые команды.
Я не могу сказать этого достаточно. Я должен был восстановить коробку, потому что кто-то не обращал внимания и печатал в
rm -rf *
то время как в /.* nix предполагает, что если вы являетесь пользователем root или вы используете права root, вы знаете, что делаете. Поэтому убедитесь, что вы знаете, что делаете, прежде чем сделать это.
Альтернатива, которая гарантирует, что ваша команда 'cd' работает до того, как вы выполните команду 'rm', заключается в использовании
источник
cd dontDeleteMe && rm -rf *
&&
Оператор не просто объединяет команды; это требует, чтобы каждая команда была успешной, прежде чем будет выполнена следующая. Еслиcd
команда не выполнена по какой-либо причине (каталог не существует, привилегии и т. Д.), Тоrm
команда не будет выполнена. Я бы назвал это безопаснее.источник
rm -rf *
все равно будешь бегать .очистит настоящий рабочий каталог
источник