Відповіді:
Практикуйте безпечні обчислення. Просто перейдіть на один рівень в ієрархії та не використовуйте виразного символу:
cd ..; rm -rf -- <dir-to-remove>
Два тире --
говорять, rm
що <dir-to-remove>
це не варіант командного рядка, навіть коли він починається з тире.
rm ./
ви можете випадково набрати, rm . /
що може стати катастрофою.
Видалить усі файли / каталоги нижче поточного.
find -mindepth 1 -delete
Якщо ви хочете зробити те ж саме з іншим каталогом, ім'я якого у вас є, ви можете просто назвати його
find <name-of-directory> -mindepth 1 -delete
Якщо ви хочете видалити не лише підкаталоги та файли з нього, а й сам каталог, опустіть -mindepth 1
. Зробіть це без того, -delete
щоб отримати список речей, які буде видалено.
-mindepth 1
якщо ви вказуєте каталог ( find <name-of-directory> -mindepth 1 -delete
). В іншому випадку Йоханнес має рацію, він не видалить поточну робочу директорію (при використанні find -delete
).
find -mindepth 1 -delete
але я отримав , illegal option -- m
але він працював чудово , коли я витягував варіант mindepth find . -delete
Те, що я завжди роблю, - це тип
rm -rf *
а потім натисніть ESC- * , і bash розширить * до явного списку файлів і каталогів у поточному робочому каталозі.
Переваги:
Насправді мені це так подобається, що я зробив це поведінкою TAB за замовчуванням за допомогою цього рядка в .bashrc:
bind TAB:insert-completions
--
у цій відповіді? Я мушу сказати, що цей підхід є надзвичайно загальним.
Використовуйте
rm -rf *
Оновлення: .
стоїть для поточного каталогу, але ми не можемо ним скористатися. Здається, що команда має явні перевірки на .
і..
. Використовуйте замість шаблону підстановки. Але це може бути ризиковано.
Більш безпечною версією IMO є використання:
rm -ri *
(це вимагає підтвердження перед видаленням кожного файлу / каталогу.)
Це правильно, що rm –rf .
буде видалено все в поточному безпосередньо, включаючи будь-які підкаталоги та їх вміст. Одна точка ( .
) означає поточний каталог. будьте обережні, щоб цього не робити, rm -rf ..
оскільки подвійна крапка ( ..
) означає попередній каталог.
Це означає, що якщо ви схожі на мене і у вас одночасно відкрито кілька вікон терміналів, вам краще бути в безпеці і скористайтеся rm -ir .
Давайте подивіться на аргументи команд, щоб зрозуміти, чому.
По-перше, якщо ви подивитеся на сторінку rm
команди команд ( man rm
під більшістю Unix), ви помітите, що це –r
означає "видаляти вміст каталогів рекурсивно". Отже, виконуючи rm -r .
поодинці, вилучите все з поточного каталогу та все нижче.
У rm –rf .
доданому -f означає "ігнорувати неіснуючі файли, ніколи не підказуючи". Ця команда видаляє всі файли та каталоги в поточному каталозі і ніколи не вимагає підтвердити, що ви дійсно хочете це зробити. -f
особливо небезпечно, якщо ви запускаєте команду під привілеєм користувача, оскільки ви можете видалити вміст будь-якого каталогу, не отримуючи шанс переконатися, що це дійсно те, що вам потрібно.
З іншого боку, у rm -ri .
тому, -i
що замінює -f
засоби "підказка перед будь-яким видаленням". Це означає, що ви отримаєте шанс сказати "ой! Це не те, що я хочу", перш ніж rm із задоволенням видалить усі ваші файли.
У мої ранні систематичні дні я робив систему rm -rf /
в системі під час реєстрації з повними привілеями (root). Результат отримав два дні відновлення системи з резервного копіювання. Тому я зараз працюю rm -ri
.
зробити що ви знаходитесь у правильному каталозі
rm -rf *
Я вважаю, що ця відповідь є кращою:
/unix/12593/how-to-remove-all-the-files-in-a-directory
Якщо ваш каталог верхнього рівня викликається
images
, то запустітьrm -r images/*
. При цьому використовується глобальний оператор оболонки*
для запускуrm -r
кожного файлу чи каталогу в межах зображень.
в основному ви піднімаєтеся на один рівень, а потім скажете видалити все, що знаходиться в X каталозі. Таким чином, ви все ще вказуєте, яку папку має видалити вміст, що безпечніше, ніж просто сказати "видалити все тут", зберігаючи початкову папку (що іноді ви хочете, тому що вам заборонено або просто не хочете щоб змінити наявні дозволи папки)