
:~
Я случайно создал имя файла в оболочке bash
scp foo :~
Как это удалить?
решение1
попробуй rm ':?'
или rm ":?"
илиrm :\?
в основном вам нужно заключить имя файла в одинарные или двойные кавычки. Или экранировать любые специальные символы, содержащиеся в имени файла.
Вот некоторые специальные символы, которые я могу насчитать:
*
|
$
&
#
<>
;
space/tab/newline
\
brackets/parenthesis/braces
'"`
?
etc
Я предлагаю использовать одинарные кавычки, чтобы предотвратить удаление неправильно названного файла my_file
вместо $file
with rm $file
или rm "$file"
when file='my_file'
. Символ одинарной кавычки — единственный символ, который вы не можете заключить в одинарные кавычки в оболочках типа Bourne, но вы всегда можете заключить в кавычки остальную часть имени файла с помощью '...'
и '
саму себя как \'
:
rm -- '-$#~<>'\''"*?[]{}'`
Обратите внимание, что это -
не является чем-то особенным для оболочки, но это особенно в rm
том, что если он находится в начале аргумента, он рассматривается как опция. Здесь говорится, --
что rm
аргументы, которые следуют за ним, не должны рассматриваться как опции, даже если они начинаются с -
.
решение2
В общем, когда вы хотите удалить файл со странным именем, вы можете попробовать использовать маркер --
, который обозначает конец опций. Все, что находится после этого флага, обрабатывается как позиционный параметр. (См. также:Что означает «--» (двойное тире)?)
Итак, это было бы
rm -i -- :?
(Как предположил @Doug O'Neal, эта -i
опция запрашивает перед удалением подтверждение, чтобы убедиться, что вы удаляете нужный файл.)
Однако в этом случае ?
будет расширен оболочкой как символ glob. Поэтому вышесказанное не сработает.
В этом случае вы можете использовать функцию автозаполнения оболочки. Перейдите в каталог, где находится файл со странным именем, затем введите rm :
(не нажимая Enter), а затем нажмите Tab, чтобы просмотреть все файлы в текущем каталоге. Файл со странным именем будет отображаться правильно заключенным в кавычки.