Понимание флага -R и * в командах rm
При использовании команды rm в OS X 10.9 я случайно удалил весь диск.
Как я понимаю, команда, которую я использовал: sudo rm -Rfv /Volumes/Disk/AppName\!\ Whatever\ X.app/Contents/Resources/*
все содержимое каталога "Ресурсы" будет удалено, включая папки с файлами, поэтому я использовал флаг "R". Буква "v" кратко показала, какие файлы были затронуты, но я закрыл окно через несколько секунд. Возможно, было ошибкой использовать флаг "f", но без него проблемная папка не была бы удалена.
Разве данный путь не ограничивает команду этим каталогом? Как можно было дать команду более безопасным образом, ограничивая ее только содержанием пути?
Причина, по которой я использовал rm, заключалась в том, что в каталоге "Resources" содержался файл, который отказывался быть удаленным, поскольку он "содержал файлы", которые были невидимы также при отображении невидимых файлов, не позволяли заменять себя или помещать в корзину. Возможно, этот файл каким-то образом указывал на весь диск, и по этой причине все было удалено. Это кажется вам вероятным объяснением?
Я проверил этот внешний диск на наличие ошибок, но он каждый раз возвращался как безумно чистый. Это новый диск на 3 ТБ.
2 ответа
При использовании команды rm в OS X 10.9 я случайно удалил весь диск.
Я не вижу, как эта команда удалит содержимое всего диска.
Насколько я понимаю, команда, которую я использовал: sudo rm -Rfv /Volumes/Disk/AppName!\ Wh бы то ни было \ X.app/Contents/Resources/*, будет удалено все содержимое каталога "Resources", включая папки с файлами.
Правильный.
Разве данный путь не ограничивает команду этим каталогом?
Это так, и в приведенном вами примере вы тщательно избежали всех пробелов. Теперь, если вы этого не сделали и в результате получили неэкранированный whitespac в пути, команда могла бы выглядеть так:
rm -Rfv
/Volumes/Disk/
AppName\!\Whatever\ X.app/Contents/Resources/*
,
Обратите внимание, что я не говорю, что вы сделали это, но это единственное, что я могу придумать, которое удалит все, что установлено в / Volumes / Disk /
Как можно было дать команду более безопасным образом, ограничивая ее только содержанием пути?
Вы можете сначала перейти к месту, где вы хотите удалить файлы.
cd /Volumes/Disk/AppName\!\ Whatever\ X.app/Contents/Resources/
rm -Rfv *
Всегда будьте осторожны при использовании rm как с рекурсией, так и с силой (-R и -f). Особенно как root (cq sudo'd).
Команда "rm" такая же в системах *nix (включая BSD, на которой основан OSX)
Так что смотрите man rm для объяснения переключателей.
-R означает рекурсивный, это означает, что он будет просто зацикливаться на всех подкаталогах по указанному пути. Поскольку эта команда не будет перенаправлять мягкие ссылки, вы можете быть уверены, что она ограничена каталогом.