Какой самый безопасный способ очистить каталог в * nix? - PullRequest
5 голосов
/ 17 декабря 2008

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

rm -rf ./*

Есть ли более безопасный способ очистки содержимого текущего каталога?

Ответы [ 13 ]

7 голосов
/ 17 декабря 2008

Вот более безопасный способ: сначала используйте ls, чтобы перечислить файлы, которые будут затронуты, затем используйте историю командной строки или подстановку истории, чтобы изменить ls на rm, и снова выполните команду после того, как вы убедился, что с правильными файлами будут работать.

7 голосов
/ 17 декабря 2008

Самый безопасный способ - сесть на руки перед нажатием Enter.

Кроме того, вы можете создать псевдоним, подобный этому (для Bash)

alias rm="pwd;read;rm"

Это покажет вам ваш каталог, дождитесь нажатия клавиши Enter и затем удалите то, что вы указали с соответствующими флажками Вы можете отменить, нажав ^ C вместо Enter.

5 голосов
/ 17 декабря 2008

Я думаю, что это разумный способ:

find . -maxdepth 1 \! -name . -print0 | xargs -0 rm -rf

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

Теперь, если вас беспокоит, что он удалит, просто измените его на

find . -maxdepth 1 \! -name . -print  | less

И посмотрите на список. Теперь вы можете поместить его в функцию:

function enum_files { find . -maxdepth 1 \! -name . "$@"; }

И теперь ваше удаление безопасно:

enum_files | less                     # view the files
enum_files -print0 | xargs -0 rm -rf  # remove the files

Если вы не привыкли вставлять новые строки в имена файлов, вы можете опустить параметры -print0 и -0. Но я бы использовал их, на всякий случай:)

5 голосов
/ 17 декабря 2008

Если вы хотите быть действительно безопасным, вы можете создать простой псевдоним или скрипт оболочки, например:

mv $ 1 ~ / .recycle /

Это просто переместит ваши вещи в папку .recycle (привет, Windows!).

Затем настройте задачу cron для выполнения команды rm -rf для материалов в этой папке, которые старше недели.

3 голосов
/ 17 декабря 2008

Я использую одно из:

rm -fr .

cd ..; rm -fr name-of-subdirectory

Я редко достаточно привязан к каталогу, от которого я хочу избавиться, но должен сохранить сам каталог.

3 голосов
/ 17 декабря 2008

Перейдите на один уровень вверх и введите имя каталога

rm -rf <dir>/*
2 голосов
/ 17 декабря 2008

При использовании rm -rf я почти всегда использую полный путь.

1 голос
/ 21 октября 2011

Используйте команду trash. В Debian / Ubuntu / etc. Его можно установить из пакета trash-cli. Он работает как с файлами, так и с каталогами (поскольку он действительно перемещает файл, а не сразу удаляет его).

trash реализует спецификацию корзины freedesktop.org , совместимую с корзиной GNOME и KDE.

Файлы можно восстановить с помощью restore-trash из того же пакета или через обычный графический интерфейс.

0 голосов
/ 01 марта 2019

Вот псевдоним, который я использую в macOS. Он будет запрашивать каждую команду rm перед выполнением.

# ~/.profile

function saferm() {
    echo rm "$@" 
    echo "" 
    read -p "* execute rm (y/n)? :  " yesorno

    if [ $yesorno == "y" ]; then
         /bin/rm "$@"
    fi
}

alias srm=saferm
alias rm=srm
0 голосов
/ 17 декабря 2008

У меня есть причина [tcsh]:

alias clean  '\rm -i -- "#"* *~'
alias rmo    'rm -- *.o'

Они были созданы, когда я впервые поставил пробел между * и .o. Достаточно сказать, что случилось не то, что я ожидал ...

Но могло быть и хуже. Еще в начале 90-х у моего друга был каталог ~ / etc . Он хотел удалить это. К сожалению, он набрал rm -rf / etc . К сожалению, он вошел как root. У него был плохой день!


Быть злым: трогать - '-rf *'

Для безопасности используйте '-' и -i . Или сделайте это правильно один раз и создайте псевдоним!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...