Как я могу удалить файл или каталог с именем «\»?

20

Я использую терминал на машине с Ubuntu, и есть файл, который я хотел бы удалить. Имя файла \(просто обратная косая черта).

Теперь обычно я просто делаю

rm filename

Однако, если я делаю rm \это, он думает, что я пытаюсь написать многострочную команду.

Как я могу удалить этот файл? Я знаю, что могу просто использовать файловую систему с графическим интерфейсом, но это не очень эффективно.

Итак, как я могу удалить (в терминале) файл с именем \?

Nosrettap
источник
1
Почему у вас есть файл с таким именем? (Это даже не позволяет мне поместить это в codeблок здесь в этом комментарии!)
AJMansfield
7
Больше удовольствия, если я правильно помню, пытается удалить файл с именем <BEL>, он же Ctrl-G. Каждый раз, когда вы делаете ls, клавиатура издает звуковые сигналы, пока вы (а) не обнаружили невидимый файл; и (б) определили, как удалить файл с одним непечатаемым символом в имени.
Питер Гиркенс
1
Что еще более важно, как вы удаляете файл с именем "/"?
Курт
1
@ Курт fsck. Шутки в сторону. Если названный файл /существует, ваша файловая система повреждена.
Звол
2
Мне всегда нравился файл, названный *мной ...
RBerteig

Ответы:

48

Используйте rm \\(избегайте обратной косой черты с другой обратной косой чертой). Обратите внимание , что это также работает , подобным образом , для каталогов имени \( с использованием либо rmdir, или rmс -rфлагом).

Пример:

> Mkdir demo
> CD демо
> коснуться \\
> ls -l
всего 0
-rw ------- 1 пользователь hennes 0 июля 29 20:25 \
> рм \\
> ls -l
всего 0
Hennes
источник
3
Или по тому же принципу rm '\'(но не rm "\" ).
evilsoup
2
@evilsoup просто для дополнительного пояснения: этот \ символ используется в качестве escape-символа в строках с двойными кавычками. Сказание rm "\"будет проанализировано в незамкнутую строку, так как вторая кавычка используется с escape-символом (и, следовательно, будет анализироваться как сам символ двойной кавычки, а не как конец строки). Таким образом, терминал будет ждать, пока вы не закончите строку с другим ". Эквивалентный метод для использования двойных кавычек здесь будет rm "\\"(который прямо эквивалентен обоим rm '\'и rm \\ , как вы уже подтвердили).
Прорыв
15

Общая тактика ручного удаления файлов с неудобными символами в именах:

rm -i ./*

Это предложит вам выбрать, следует ли удалять каждый файл в каталоге.

zwol
источник
3
Или, один это был один символ. rm -i ./?
Хеннес
1
Да. Если вы можете написать более конкретный глобус, чем ./*, это всегда хорошая идея, особенно когда вы делаете что-то разрушительное.
Звол
4
+1 за префикс вашего ./
шара
12

Вы также можете отменить связь, ссылаясь на индекс файла

linus ~/test $ touch \\
linus ~/test $ ls -li
total 0
15204561 -rw-r--r-- 1 pat sudo 0 Jul 29 23:03 \
linus ~/test $ find . -inum 15204561 -exec rm -v {} \;
removed `./\\'
linus ~/test $ ls -li
total 0
linus ~/test $ 
joshbaptiste
источник
0

Пожалуйста, сначала проверьте inode файла. ls -li

137791 -rw-rw-r--. 1 SVR 366 11 марта 15:57

индекс "\" равен "137791", а затем используйте команду find для удаления "\" с номером индекса.

находить . -inum 137791 -exec rm -i {} \;

rm: удалить обычный файл `./ \ '? да

"\" будет удален тогда.

BALVINDER SINGH
источник