Ви видалили (майже) увесь свій домашній каталог!
rm -r something рекурсивно видаляє файли та каталоги в / під чим-небудь ; він буде виходити з ладу лише для елементів, у яких він не має дозволу на видалення, або тому, що вони належать іншому користувачеві (наприклад root), або тому, що вони використовуються (наприклад, кріплення GVFS).
Якщо ви не додали -f(як у, rm -rf something), ви отримаєте щось на зразок:
rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?
У цей момент ви можете зробити аборт, і тоді, швидше за все, зрозумієте, що виконали неправильну команду.
Пропозиції громади щодо того, як уникнути подібних аварій
Примітка: Вікі спільноти, будь-хто не соромтесь робити свій внесок.
Для кількох файлів скористайтеся -iопцією, щоб отримати підтвердження про видалення файлів або каталогів:
$ rm -ri something/
rm: remove regular file ‘something/file~’? y
rm: descend into directory ‘something’? y
rm: remove regular file ‘something/file’? y
rm: remove directory ‘something’? y
Якщо ви видаляєте з поточного каталогу, приставте його до а, ./щоб уникнути помилки при видаленні іншого місця розташування.
$ cd something
$ rm -v ./*~
removed ‘./file~’
Сказане було для демонстрації використання ./. Якщо є підкаталог, ви, звичайно, можете також скористатися rm -v something/*~. Остерігайтеся : не думайте, що це rm ./.*видаляє всі приховані файли в поточному каталозі. Дивіться це серверне запитання за замовчуванням щодо шляхів вирішення проблем прихованих файлів.
Переміщення, а не видалення: Замість того, щоб видаляти файли рекурсивно, в першу чергу я звик переміщувати файли, які я хочу позбутися десь ще, перш ніж остаточно їх видалити. Якщо щось пішло не так, його легко відновити.
mv -b SOURCE DEST
Використовуйте find(можливо, за допомогою grep) для попереднього перегляду, якщо ви хочете рекурсивно видаляти вибрані файли. Спробуйте зробити це рідкісним явищем, але якщо вам доведеться ...
findбез аргументів рекурсивно перераховує всі файли / каталоги під поточним. Вам слід спробувати знайти, man findяк зробити це вибірково (скарбниця), але якщо ви не хочете турбуватися, ви можете просто скористатися знайомим grepдля фільтрування файлів, які ви хочете видалити.
- Припустимо, я хакер ядра uber-l33t, і мене турбує кілька КБ файлів "приклад" у моєму вихідному дереві; Я хочу видалити всі файли, що містять це в імені. Тому я набираю
find | grep example, що дає мені ці 20 файлів. Це виглядає добре, тому я тепер переходжу та видаляю ці точні файли, а також викладений rm -vраніше багатослівний вихід через xargs:
знайти | греп приклад | xargs rm -v
що дає мені цей вихід. Такий попередній перегляд запобігає проблемам, коли, скажімо, ви робите друк та друк sampleзамість example.
Вищевказане рішення не слід використовувати, якщо у вас є імена файлів, що містять пробіли, символи вкладки, нові рядки або лапки ( "або '), оскільки це призведе xargsдо відмови, або подавання rmз неповними іменами, що в гіршому випадку може призвести до видалення неправильного файли. Безпечний спосіб зробити вищезгадане - це зробити все з findоператорами та діями.
Далі буде показано всі файли, що містять слово example
find . -name "*example*"
Якщо у цьому списку є файли, які потрібно видалити, використовуйте -execдію, щоб передати файли rm.
find . -name "*example*" -exec rm -v {} +
Див. Розділ Використання пошуку для отримання додаткової допомоги щодо використання find.