Почему, когда я пытаюсь удалить ..
из каталога, я получаю сообщение об ошибке:
rm: refusing to remove '.' or '..' directory: skipping '..'
И прежде чем вы спросите, почему я хочу это сделать: Просто потому, что.
Это защита, добавленная к большинству реализаций rm
для устранения неправильной функции некоторых оболочек (включая оболочки POSIX), где rm -rf .*
рекурсивно удаляет содержание .
и ..
, а также (это было исправлено оболочкой Forsyth и производными (например, pdksh), zsh
и fish
по крайней мере) .
Вы можете использовать rm
, встроенную в zsh
(оболочка, в которой нет этого недостатка).
zmodload zsh/files # to load and enable the builtin version of rm
# and a few other utilities
rm -rf ..
Альтернативно, с GNU find
или совместимым, вы можете сделать:
find .. -delete
Просто для ясности, они удаляют содержимое (рекурсивно) родительского каталога (включая текущий рабочий каталог).
Если вы хотите удалить запись ..
из текущего каталога, как правило, в современных системах, вы не можете этого сделать. .
и ..
всегда существуют, пока каталог, содержащий их, существует и не может быть удален. В некоторых файловых системах они даже виртуальные (не являются физическими записями в файле каталога).
Даже если вам удалось их удалить (например, с помощью debugfs
для редактирования содержимого каталогов вручную), они будут воссозданы при следующей проверке файловой системы (fsck
) выполняется, и некоторые приложения (например, cd
встроенный в оболочки POSIX) даже полностью игнорируют их (cd ..
сбривает один компонент пути с хвоста текущего рабочего каталога, как хранится в $PWD
независимо от того, есть ли ..
в текущем каталоге или нет), а POSIX требует ..
в аргументах пути, передаваемых системным вызовам, для обозначения родительского каталога независимо от того, существует ли фактическая запись каталога с таким именем в текущем ( или соответствующий для таких путей, как dir/../независимо
).
Думаю, вам нужна команда:rm -rf *
Я думаю, что rm -rf.*
работает и со скрытыми файлами? Не уверен.
Но УБЕДИТЕСЬ, что вы находитесь в текущем каталоге, из которого хотите это запустить. Другими словами, введите pwd
или echo $PWD
, чтобы убедиться....
Так что да, это удалит все файлы в текущем каталоге.
Я также уверен, что rm -rf../*
будет работать, так как я проверил это. Вы можете добавить столько родительских каталогов ("../" ), сколько пожелаете.
В общем, просто добавьте «знак» в конце, чтобы обойти дурацкую систему безопасности.