Как удалить все файлы и подкаталоги в каталоге БЕЗ удаления каталога в bash?

Начиная с ядра 2.6.35, файл level устарел и теперь заменен на control.

Состояние auto - это нормальное состояние, в котором ядру разрешено автоматически приостанавливать и автоматически возобновлять работу устройства. В ядрах до 2.6.32 можно также указать suspend, что означает, что устройство должно оставаться приостановленным, а автоматическое возобновление запрещено. Этот параметр больше не поддерживается.

Более подробную информацию можно найти в текущей документации по управлению питанием для USB ядра.

50
задан 10.02.2020, 13:06

11 ответов

rm -rf  directory/{.*,/*}

Что говорит:

Удалить все файлы, начиная с. в «каталоге» и во всех других файлах.

Хотя, как любезно отмечено Нефтасом , это решение небезопасно!

Более безопасное решение:

 rm -rf directory/!(.|..)
0
ответ дан 10.02.2020, 13:06
  • 1
    Это похоже на намного лучшее решение, чем, что я придумал. Я могу предложить, чтобы Вы отредактировали свой ответ? – zys 10.02.2020, 13:07
  • 2
    Эта команда могла потенциально быть опасной, с тех пор you' ре также включая . и .. каталоги. Этого можно избежать путем изменения {.*} к {.??*}, но тогда Вы won' t удаляют скрытые файлы только с одним символом, такой как .a. – Damian Alberto Pastorini 10.02.2020, 13:07
  • 3
    what' s об этом? комната-rf каталог/! (. |..) – mashup 10.02.2020, 13:07
  • 4
    принятое предложение) – hagrawal 10.02.2020, 13:08

Единственная причина, по которой rm -r ./* не всегда работает, заключается в том, что у вас могут быть скрытые файлы и / или папки, которые не соответствуют *.

С этой целью bash предоставляют возможность сделать * сопоставленным со всем, даже со скрытыми объектами:

cd dont-delete-me
shopt -s dotglob
rm -r ./*

Может быть полезно сбросить dotglob в состояние по умолчанию (не установлено) , если вы продолжаете использовать оболочку, в которой вы выполняли вышеуказанные команды:

shopt -u dotglob 
0
ответ дан 10.02.2020, 13:06
  • 1
    Это не может также работать, когда у Вас есть большое количество файлов – user61629 10.02.2020, 13:07

Существует еще более простой ответ:

  1. cd dontDeleteMe

  2. rm -rf *

[ 1110] Время основной лекции по системному администрированию: Обязательно обращайте внимание на то, где вы находитесь, когда используете такие развернутые команды.

Я не могу сказать этого достаточно. Мне пришлось восстановить коробку, потому что кто-то не обращал внимания и набрал rm -rf * в /.

* nix предполагает, что, если вы являетесь пользователем root или вы являетесь пользователем root, вы знаете, что делаете. Поэтому убедитесь, что вы знаете, что делаете, прежде чем сделать это.

Альтернативой, которая гарантирует, что ваша команда 'cd' работает до того, как вы выпустите 'rm', является использование

cd dontDeleteMe && rm -rf *
0
ответ дан 10.02.2020, 13:07
  • 1
    На самом деле it' s не больше или немного менее опасный, чем, что Вы предлагаете. Весь & & делает должен объединить две команды в цепочку вместе так, чтобы они выполнились одновременно. Если что-либо, мой метод на самом деле БОЛЕЕ БЕЗОПАСЕН, так как необходимо остановиться и .look перед выполнением комнаты-rf *. Приостановка для проверения дважды всегда лучше. – Vega 10.02.2020, 13:08
  • 2
    @EliahKagan That' s точно, что делает мой фрагмент кода... – FelixSFD 10.02.2020, 13:08
  • 3
    Это - опасное предложение. То, что Вы хотите: cd dontDeleteMe && rm -rf * – g00glen00b 10.02.2020, 13:08
  • 4
    @Izkata Или удостоверяются, что проверили, что операция CD была успешна, прежде, чем дать команду комнаты. – eby 10.02.2020, 13:09
  • 5
    @user30619 && оператор doesn' t просто объединяют команды в цепочку вместе; это требует, чтобы каждая команда была успешна, прежде чем следующий будет выполняться. Если cd команда перестала работать по какой-либо причине (каталог doesn' t существуют, полномочия, и т.д.), тогда rm команда won' t быть выполненным. I' d вызов, что более безопасный. – Jeff Hoye 10.02.2020, 13:09
find /dontDeleteMe/ -xdev -depth -mindepth 1 -exec rm -Rf {} \;

Используйте опцию xdev для удаления файлов только в пределах границ устройства.

0
ответ дан 10.02.2020, 13:08
  • 1
    GNU находит, имеет -delete. Это подразумевает -depth и легче помнить, чем -depth -exec rm -Rf {} \; – Marcelo Agimóvel 10.02.2020, 13:08

Чтобы удалить (в терминале) все файлы и подкаталоги, кроме базового каталога с именем "dontdelete":

rm -rf dontdelete/*
0
ответ дан 10.02.2020, 13:08
  • 1
    Этот doesn' t удаляют скрытые файлы, таким образом, " весь files" мог бы быть слишком полужирный оператор. – Jsa 10.02.2020, 13:09

Чтобы удалить все в каталоге без удаления каталога, введите:

rm -rfv dontDeleteMe/*

Обратите внимание, что часть /* очень важна. Если вы поставите пробел перед *, он удалит все ваши файлы в вашем текущем каталоге.

Кроме того, будьте очень осторожны, играя с rm, -r и * в одной команде. Они могут быть катастрофической комбинацией.

Обновление: Хорошо, я поняла, если у вас есть скрытые / точечные файлы [имена файлов с точками в начале, например. .hidden] тогда эти файлы останутся нетронутыми.

На самом деле, самое простое решение первоначального вопроса : rm -rfv dontDeleteMe && mkdir dontDeleteMe

Еще один вариант - использовать -exec опцию или трубу [119]. до xargs (ниже):

find dontDeleteMe/* -print0 | xargs -0 rm -rv

0
ответ дан 10.02.2020, 13:09
  1. Самая простая вещь для меня - эксперт по Windows, но новичок в Ubuntu
  2. Щелкните значок «Файлы» на панели запуска
  3. Перейдите в каталог, где находятся файлы и папки, которые вы хотите удалить
  4. Щелкните правой кнопкой мыши в пустой области окна рядом с файлами и нажмите «Открыть в терминале» - оставьте окно «Файлы» открытым
  5. Окно терминала откроется и будет « установить "на папку, которую вы нашли
  6. Вы можете набрать" dir "(игнорировать кавычки, когда я говорю" тип ") и нажать Enter для терминала, чтобы показать список файлов и папок - просто чтобы доказать, что вы" в " правая папка
  7. , введите «rm -rf *» и нажмите enter
  8. в зависимости от размера папок / файлов, чтобы удалить систему, приостановит работу
  9. Когда возвращается запрос терминала, файлы окно, которое вы открыли, теперь скажет «Папка пуста»
  10. У меня был успех с этим методом, и он дал мне возможность видеть файлы / папки как в окне «Файлы», так и в результате команды Dir в окно терминала
  11. Меня также порадовало, что в окне «Файлы» папка теперь пуста - тем более, что я гнался за этими файлами в поисках папки с мусором, в которой они находились
  12. Спасибо всем, кто отправил ответы - это было очень информативно
0
ответ дан 10.02.2020, 13:10
  • 1
    Это кажется довольно замысловатым †“тем более, что you' ре, собирающееся заканчивать тем, что работало rm -rf * так или иначе. – activedecay 10.02.2020, 13:10

Откройте терминал ( Ctrl + Alt + T ) и наберите следующий текст:

find somedir -mindepth 1 -delete

Это будет соответствовать всем файлы и каталоги внутри somedir и его (внучатых) потомков, включая «скрытые» точечные файлы, но исключая сам somedir из-за -mindepth 1, а затем -delete из них.

0
ответ дан 10.02.2020, 13:10
  • 1
    Испытывает недостаток в объяснении, но тем не менее лучшем ответе. Также работы в OSX (за исключением способа открытие Terminal, конечно). – Marcelo Agimóvel 10.02.2020, 13:11
  • 2
    Добро пожаловать в AskUbuntu! В то время как Ваш ответ мог потенциально помочь исходному плакату, отсутствию информации объяснить, что это сделает для помощи ему, делает ответ неполным. – user1982195 10.02.2020, 13:11

Я не уверен, почему это так сложно, помоги мне, если я не прав

cd DoNotDeleteDir #<- this is just to make sure we are inside
find . | xargs rm -rf

Вот и все

0
ответ дан 10.02.2020, 13:11
  • 1
    Это имеет небольшой дефект попытки удалить текущий каталог также, который, конечно, doesn' t работа, потому что it' s все еще используемый как рабочий каталог оболочки вызова. – Adam 10.02.2020, 13:11

Вы можете использовать find с флагом -delete:

find dontDeleteMe/* -delete

Параметр /* важен, поскольку говорит find искать только ВНУТРИ папки, называемой "dontDeleteMe".

Также убедитесь, что флаг -delete находится в конце команды find.

0
ответ дан 10.02.2020, 13:11
  • 1
    Это решение doesn' t удаляют любые скрытые файлы, если Вы не включаете dotglob. Иначе с помощью -mindepth 1 опция флага кажется единственным способом получить его работа. – Anil Kumar B 10.02.2020, 13:12
rm -rf ${PWD}/*

очистит текущий рабочий каталог

0
ответ дан 10.02.2020, 13:12

Теги

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