Как быстро удалить файлы и каталоги через терминал (оболочка bash) [закрыто]

331

Из окна терминала:

Когда я использую rmкоманду, она может удалять только файлы.
Когда я использую rmdirкоманду, она удаляет только пустые папки.

Если у меня есть каталог с файлами и папками в папках с файлами и т. Д., Есть ли способ удалить все файлы и папки, не набирая много команд?

Если это имеет значение, я использую оболочку Mac Bash из терминала, а не Microsoft DOS или Linux.

baduker
источник
На всякий случай, если вы хотите восстановить файлы в будущем, не используйте «rm» для таких случаев. Используйте «rm-trash»: github.com/nateshmbhat/rm-trash
Натеш Бхат

Ответы:

761
rm -rf some_dir

-r "recursive" -f "force" (подавить подтверждающие сообщения)

Быть осторожен!

Джим Льюис
источник
27
+1 и рад, что вы добавили "Будь осторожен!" часть ... определенно команда "Sawzall", которая может быстро превратить хороший день в плохой ... если его использовать небрежно.
itmatt
5
как не делать "# rm -rf /", вы пожалеете, что:
DarthVader
1
@itsmatt: Вы знаете, что они говорят ... дайте кому-нибудь Sawzall, и вдруг каждая проблема выглядит как часы веселья!
Джим Льюис
164
На маке? Сделайте это вместо этого: brew install trashзатем trash -rf some_dirЭто переместит нежелательный каталог в вашу корзину вместо того, чтобы просто исчезать из сети в стиле Prestige . ( источник )
zakdances
4
Подход "мусор" это здорово!
Anopres
59
rm -rf *

Удалил бы все (папки и файлы) в текущем каталоге.

Но будь осторожен! Выполняйте эту команду, только если вы абсолютно уверены, что находитесь в правильном каталоге.

Прайн
источник
17
rm -rf очень рискованная команда, вы всегда должны быть осторожны и указывать папку для удаления.
eomeroff
8
Как насчет того, чтобы бежать ls -R *первым, чтобы посмотреть, что будет удаленоrm -rf *
Хаммад Хан
Это прекрасно работает для меня, спасибо.
Моника Хюбнер
14

Да, есть. -rОпция указывает rm, что г ecursive, и удалить всю иерархию файлов укоренились на своих аргументов; другими словами, если дан каталог, он удалит все его содержимое и затем выполнит то, что эффективно rmdir.

Два других варианта, которые вы должны знать, это -iи -f. -iозначает я Интерактивно; это заставляет rmвас перед удалением каждого файла. -fобозначает ф Orce; это идет вперед и удаляет все, не спрашивая. -iбезопаснее, но -fбыстрее; используйте его, только если вы абсолютно уверены , что удаляете правильную вещь. Вы можете указать это с -rили нет; это независимая настройка.

И как обычно, вы можете комбинировать переключатели: rm -r -iесть rm -riи rm -r -fесть rm -rf.

Также обратите внимание, что то, что вы изучаете, применимо к bashкаждой ОС Unix: OS X, Linux, FreeBSD и т. Д. Фактически, rmсинтаксис одинаков практически во всех оболочках в каждой ОС Unix. OS X, под капотом, на самом деле является системой BSD Unix.

Антал Спектор-Забуский
источник
1
Хотя все вышеупомянутые опции являются стандартными для всех перечисленных разновидностей Unix, есть и некоторые различия. Например, OS X (но не Linux) имеет "rm -d", который удаляет либо файлы, либо пустые каталоги. Тем не менее, +1 за то, что OS X является BSD внутри.
Дэвид Гелхар
True --- подмножество POSIX (в значительной степени) гарантированно будет работать согласованно в Unixen, но все, что может или не может быть за пределами.
Антал Спектор-Забуский
2

Поэтому я искал способ удалить все файлы в каталоге, за исключением некоторых каталогов и файлов, которые я хотел сохранить. После долгих поисков я придумал способ сделать это, используя find.

find -E . -regex './(dir1|dir2|dir3)' -and -type d -prune -o -print -exec rm -rf {} \;

По сути, он использует регулярные выражения, чтобы выбрать каталоги, чтобы исключить из результатов, а затем удаляет оставшиеся файлы. Просто хотел выложить это на случай, если кому-то еще это понадобится.

msantoro12
источник