Как удалить все файлы из текущего каталога, включая текущий каталог?

Как я могу удалить все файлы и подкаталоги из текущего каталога, включая текущий каталог?


person Ib33X    schedule 15.02.2009    source источник


Ответы (6)


Под bash с инструментами GNU я бы сделал так (в большинстве случаев должно быть безопасно):

rm -rf -- "$(pwd -P)" && cd ..

не под bash и без инструментов GNU я бы использовал:

TMP=`pwd -P` && cd "`dirname $TMP`" && rm -rf "./`basename $TMP`" && unset TMP

почему это более безопасно:

  • заканчивайте список аргументов -- в случаях, когда наш каталог начинается с тире (не bash: ./ перед именем файла)
  • pwd -P не только pwd в тех случаях, когда мы находимся не в реальном каталоге, а в символической ссылке, указывающей на него.
  • "s вокруг аргумента в случаях, когда каталог содержит пробелы

некоторая случайная информация (версия bash):

  • cd .. в конце можно опустить, но иначе вы оказались бы в несуществующем каталоге...

EDIT: как заметил kmkaplan, -- не является необходимым, так как pwd возвращает полное имя пути, которое всегда начинается с / в UNIX.

person Johannes Weiss    schedule 15.02.2009
comment
что, если вы хотите сначала включить небольшое диалоговое окно, например, вы уверены, что хотите удалить этот каталог? и сделать псевдоним для всего этого? - person Ib33X; 15.02.2009
comment
Вы можете использовать rm -rfi вместо rm -rf, и он спросит вас rm: удалить каталог `/tmp/dir_to_be_deleted'?, вы имеете в виду это? - person Johannes Weiss; 16.02.2009
comment
rm -rfi будет запрашивать каждое действие в этом каталоге, я думал что-то, что будет запрашивать только один раз и удалять все. - person Ib33X; 16.02.2009
comment
read -n1 -pВы действительно хотите удалить '$(pwd -P)' [yN]? A && if [ $(echo $A | tr Y y) = y ]; затем rm -rf -- $(pwd -P) && cd .. ; фи - person Johannes Weiss; 16.02.2009

olddir=`pwd` && cd .. && rm -rf "$olddir"

Требуется cd .., иначе произойдет сбой, поскольку вы не можете удалить текущий каталог.

person dwc    schedule 15.02.2009
comment
Вы можете удалить текущий каталог. - person kmkaplan; 15.02.2009
comment
kmkaplan, вы уверены, что можете удалить текущий каталог с помощью rm? На скольких операционных системах вы основывали эти знания? - person dwc; 15.02.2009
comment
например, не будет работать для каталога с именем --no-preserve-root. - person Johannes Weiss; 15.02.2009
comment
dwc: да, я тестировал Linux, OpenBSD и MacOSX. Но я почти уверен, что каждая система Unix будет делать то же самое, и я даже думаю, что каждая система POSIX будет делать это. - person kmkaplan; 15.02.2009
comment
Вы можете в Linux (только что подтвердил). Интересно, что после удаления каталога ls -al сообщает об итогах 0 вместо чего-то вроде total X с расширением . и .. настоящее - person Mikeage; 15.02.2009
comment
удаление открытого файла абсолютно не проблема в unix. Нахождение в каталоге — это не что иное, как наличие открытого файла. кмкаплан правильный! - person Johannes Weiss; 15.02.2009
comment
Я вижу :rm: . и .. не могут быть удалены Почему бы не быть консервативным и не работать везде? Что, если этот фрагмент будет помещен в сценарий #!/bin/sh? Что если...? Лучше иметь что-то более портативное. - person dwc; 15.02.2009

Я думаю, что это было бы возможно в DOS/Windows CMD, но я не могу найти способ передать данные между командами. Кто-то еще может знать исправление для этого?

FOR /F %i IN ('cd') DO SET MyDir=%i | CD .. | RD /S %MyDir%
person Kristen    schedule 15.02.2009
comment
Это не относится к части каталога current. - person kmkaplan; 15.02.2009

операционная система? в материалах на основе *NIX вы ищете «каталог rm -rf/»

ПРИМЕЧАНИЕ: флаг «-r» для «рекурсивного» может быть опасным!

person neoice    schedule 15.02.2009

Вы просто можете вернуться в родительскую папку целевой папки, а затем использовать «rm -rf yourFolder». или вы можете использовать «rm -rf *», чтобы удалить все файлы и подпапки из текущей папки.

person kext    schedule 19.10.2014

person    schedule
comment
Да, ошибка в SO помешала появлению обратных кавычек. - person kmkaplan; 15.02.2009
comment
например, не будет работать для каталога с именем --no-preserve-root - person Johannes Weiss; 15.02.2009
comment
Йоханнес: pwd возвращает абсолютный путь. Он никогда не будет начинаться с тире. - person kmkaplan; 15.02.2009
comment
kmkaplan: извините, верно! Не думал об этом. Я всегда использую -- и в большинстве случаев это необходимо, но с pwd это не так. - person Johannes Weiss; 15.02.2009