Как удалить файл, имя которого начинается с тире (дефис или минус) -
? Я ssh'd на удаленном сервере OSX, и у меня есть этот файл в моем каталоге:
tohru:~ $ ls -l
total 8
-rw-r--r-- 1 me staff 1352 Aug 18 14:33 --help
...
Как в мире я могу удалить --help
из CLI? Эта проблема иногда встречается в разных формах, эти файлы легко создавать, но от них сложно избавиться.
Я пробовал использовать обратную косую черту
rm \-\-help
Я пробовал цитаты
rm "--help"
Как предотвратить использование символа минус (тире или дефис) в качестве опции?
rm --help
самом деле объясняет, как удалить имена файлов, начинающиеся с-
. хороший вопрос тем не менее.Ответы:
Используйте «-», чтобы rm прекратил синтаксический анализ параметров командной строки, например так:
источник
rm
команды поддерживают--
аргумент?--
GNU (SysIII, 1980) и являются стандартными / POSIX. Стандартные утилиты за исключением нескольких (вродеecho
) понимают--
. YMMV для других команд, если они не используют API getopt () для анализа параметров.Или вы можете сделать
источник
--
специально.-
текстовые утилиты илиcd
,foo=bar
изawk
...rm -- <filename>
нет.Используйте
find
для этого:И это хороший метод, потому что, если у вас есть несколько таких файлов, которые вы можете удалить, вы можете получить список предварительного просмотра файлов, просто запустив find без
-delete
опции, а затем, если список файлов выглядит хорошо, просто запустите это снова с-delete
.На самом деле, избегать
rm
предпочтенийfind
(особенно с предварительным просмотром) - это хорошая привычка, которая поможет вам избежать ошибокrm *
, которые неизбежно укусят вас однажды.Однако обратите внимание, что поиск будет проходить через все ваши подкаталоги, поэтому вы можете запустить его с ограничением глубины подкаталога, например так:
который ограничивает поиск текущим каталогом.
источник
find
список файлов / каталогов для просмотра. Такfind . -name...
.-delete
и-maxdepth
не являются стандартными вариантами.Ответы Вегара Нильсена и Эдфуха очень хорошие и правильные решения такой проблемы.
Я хочу добавить общий ответ на этот вопрос, который позволяет вам удалить любой файл со сложным именем файла. Сначала его номер inode получается с использованием
ls -i
или некоторой формы,stat
а затем файл удаляется путем поиска файлов в текущем каталоге по номеру inode и выполненияrm
команды для файла с соответствующим номером inodeПоскольку номера инодов уникальны в каждой файловой системе, вы можете удалить любой файл, используя это; Unicode или использование escape-символов. Это очень раздражает, поэтому я рекомендую добавить строку
в ваш
.inputrc
файл, если вы используете Bash. Это позволяет циклически просматривать список возможных завершений ( для получения дополнительной информации ).источник
find -name '--help' -delete
rm --help
, что все равно не удалит файл. Просто используйтеrm ./--help
(илиrm -i *
.find
пути аргумента командной строки ко всем файлам, поэтому он будет запускатьсяrm ./--help
иrm ./sub/dirs/--help
. Чтобы исправить второе, нужно было бы добавить-maxdepth 1
, но все это, по существу, применяет решение @ edfuh более окольным, запутанным способом и-delete
безопаснее, чем в-exec rm
любом случае.{}
и должен быть пробел\;
, иначе она не будет работать.-xdev
. Это не поможет вам запустить этоls -i --help
.Брутальное решение:
источник
Linux Пошаговое руководство по созданию файла с тире и пробелами, а затем его удалению.
БЫТЬ ОСТОРОЖЕН! Не запускайте случайно
rm -rf /
или аналогичную команду каскадного удаления.Если ваш файл, который вы пытаетесь удалить, включает в себя звездочки или косые черты, не используйте случайно
.
или,/*
или,*
или иные другие символы, которые могут каскадно удалить вашу операционную систему.Создайте файл с именем "--yo yo"
Сначала найдите это с помощью find:
Убедитесь, что команда find ТОЛЬКО находит ОДИН файл, который вы хотите удалить:
Затем передайте опцию -delete, чтобы найти и удалить их:
Ааа, и это ушло.
источник
Midnight Commander (
mc
) самый простой, просто наведите на него курсор и нажмите F8;)источник
apt-get install mc || yum install mc; mc
различные клавиши со стрелками и F8rm ./--help
?Вот решение, которое я использовал, прежде чем найти эту тему.
используйте
vim
для редактирования каталога:затем (в vim) выберите ваш файл, нажмите Del и подтвердите удаление.
когда вы закончите, выйдите из Vim
:q
источник
Вы пытались добавить имя каталога в качестве префикса:
Использование каталога в качестве префикса файла в целом помогает избежать ошибочной интерпретации символа «минус» как параметра команды функцией синтаксического анализа.
источник
Если вы хотите переименовать файл,
-.bar
(mv не будет работать), попробуйте это:перед использованием команды:
Вы должны быть в состоянии проверить содержимое исходного файла в foo.bar
источник