С моей стороны я случайно создал каталог (например) -A и заполнил его файлами.
Я хочу удалить указанный каталог. Я пробовал:
rmdir -- -A
но тогда он говорит мне, что в каталоге все еще есть файлы. И я не могу понять, как перейти в каталог, чтобы удалить указанные файлы.
Что я должен сделать, чтобы избавиться от этого хлопотного каталога?
unix
unix-shell
Кейт Бертельсен
источник
источник
Ответы:
Используйте - в каждой команде.
источник
Вы можете поместить ./ перед файлом - таким образом rm или rmdir не будут вести себя так, как будто имя файла является флагом опции.
Вы также можете выполнить опцию - которая говорит rm действовать так, как будто все после - это имя файла и что он не должен обрабатывать больше опций. Возможно, существуют старые версии rm, которые не подчиняются этому, хотя мой зоопарк античных юниксов в наши дни стал довольно маленьким, поэтому я не могу сказать вам, какие из них или есть версии, которые не понимают -.
Вы должны привыкнуть ставить ./ перед именами, когда вы все равно удаляете - вы никогда не узнаете, есть ли в вашем каталоге файл -r или -rf с именем. Вы могли бы сказать, что вы всегда должны использовать - но я считаю, что ./ более естественный, потому что он явно говорит: «Я хочу удалить файлы в этом каталоге, а не то, что * случается с глобусом»
источник
Переименуйте его, а затем действуйте как обычно:
источник
rmdir не удалит каталог с чем-либо внутри него. "рм-рф" будет. rmdir значительно безопаснее, чем "rm -rf". Ответ Му все еще, вероятно, лучший.
источник
Вышеприведенная команда работает для меня.
источник
Другим методом будет удаление по inode (это работает для файлов / каталогов с другими символами, которые трудно удалить только с помощью rm).
источник
-exec
не избегает имени и не нуждается в этом; аргумент, передаваемый через один изexec*
системных вызовов, является фактическим именем. Только входные данные оболочки требуют специальных символов, таких как звездочка в виде точки с запятой и т. Д. В кавычках, чтобы оболочка передавала правильное (без кавычек) действительное имя. Тем не менее,find -exec rm -f {}
работает только для файла, а не каталог, как просили для этого Q;find -exec rm -rf {}
действительно обрабатывает каталог и даже непустой каталог, но пропуститьfind
и просто сделатьrm -rf ./-A
это намного проще.find может удалить каталог следующим образом:
источник
Я пытался удалить каталог с именем
-p
. Ответ @ Moo достиг того, с чем я не смогrm ./-p
, что широко доступно на многих веб-страницах после поиска в Google.Другой метод заключается в использовании номера индекса. Я использовал метод, описанный здесь:
https://www.cyberciti.biz/tips/delete-remove-files-with-inode-number.html
Короче говоря, используйте следующие команды:
find
команду, используя-exec rm -irf
аргумент для файла или-exec rm -ifdr
для каталога.Убедитесь, что вы используете
-f
внутри флага, иначе bash будет жаловаться на невозможность найти каталог или файл.Проверено на:
источник
rm -d
никогда и обычно не-f
при вызове изfind
, но вам нужен-r
каталог, а файл не нужен. Даже после исправления этот метод все еще неуклюж и неполноценен. Для непустого каталога просто сделайтеrm -fr ./-p
- это r для каталога, и f в зависимости от настроек разрешения.