Як я можу видалити файл або каталог під назвою "\"?


20

Я використовую термінал на машині Ubuntu, і є файл, який я хотів би видалити. Назва файлу \(лише зворотна косої риски).

Зараз зазвичай я б просто робив

rm filename

Однак якщо я це роблю, rm \то він вважає, що намагаюся написати багаторядкову команду.

Як я можу видалити цей файл? Я знаю, що я міг просто використовувати файлову систему GUI, але це не дуже ефективно.

Отже, як я можу видалити (в терміналі) файл, який називається \?


1
Чому у вас такий файл? (Це навіть не дозволяє мені поставити його в codeблоці ось у цьому коментарі!)
AJMansfield

7
Веселіше намагається видалити файл під назвою <BEL>, він же Ctrl-G, якщо я пам'ятаю правильно. Щоразу, коли ви робите ls, клавіатура звучить на вас, поки ви (a) не виявили невидимий файл; та (b) визначили, як видалити файл із лише одним недрукуваним символом у своєму імені.
Пітер Геркенс

1
Що ще важливіше, як ви видалите файл з назвою "/"?
Керт

1
@Курт fsck. Серйозно. Якщо названий файл /існує, ваша файлова система пошкоджена.
zwol

2
Мені завжди подобався файл на ім'я *...
RBerteig

Відповіді:


48

Використовувати rm \\(уникати зворотної косої риси з іншим нахилом). Зауважте, що це також працює аналогічно для іменних каталогів \(використовуючи або прапор rmdir, або rmз -rпрапором).

Приклад:

> демонстрація mkdir
> CD-демонстрація
> торкніться \\
> лс -л
всього 0
-rw ------- 1 хенс користувачів 0 29 липня 20:25 \
> rm \\
> лс -л
всього 0

3
Або за тим же принципом rm '\'(але ні rm "\" ).
evilsoup

2
@evilsoup просто для надання додаткових роз'яснень щодо цього, \ символ використовується як символ утечі в розділених рядках з подвійним цитуванням. Висловлювання rm "\"буде проаналізовано в незамкнутий рядок, оскільки другий лапок використовується з символом втечі (і таким чином буде розбиратися як сам символ подвійної лапки, а не кінець рядка). Таким чином, термінал буде чекати, поки ви закінчите рядок з іншим ". Еквівалентний метод використання подвійних лапок тут був би rm "\\"(що прямо еквівалентно обом rm '\'і rm \\ , як ви вже підтвердили).
Прорив

15

Загальна тактика ручного видалення файлів із незграбними символами в їх іменах

rm -i ./*

Це запропонує вам вибрати чи видаляти кожен файл у каталозі чи ні.


3
Або для одиноких це була одна чара. rm -i ./?
Геннес

1
Так. Якщо ви можете написати більш конкретний глобус, ніж ./*, це завжди гарна ідея, особливо коли ви робите щось руйнівне.
zwol

4
+1 для приставки вашого глобуса./
evilsoup

12

Ви також можете від’єднати посилання, посилаючись на inode файлу

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 $ 

0

Спочатку перевірте вкладення файлу. лс -лі

137791 -rw-rw-r--. 1 ціль 366 березня 15:57

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

знайти. -inum 137791 -exec rm -i {} \;

rm: видалити звичайний файл `./ \ '? так

"\" буде видалено потім.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.