
Я создал файл с именем \;:$"\'
для тестирования моего программного обеспечения. Я получил ошибку, потому что не могу удалить свойство файла. Я пытаюсь найти точную комбинацию символов, чтобы удалить его через rm
, но не могу найти способ.
rm \\;:$\"\\\'
rm: cannot remove `\\': No such file or directory
rm "\\"\;:$\"\\\'
rm: cannot remove `\\;:$"\\\'': No such file or directory
rm '\;:$"\'''
rm: cannot remove `\\;:$"\\': No such file or directory
(Эта последняя попытка меня убила)
И много-много других попыток. Нужна рука помощи!
решение1
Если имя файла точно такое же \;:$"\'
, то вы сможете удалить его с помощью:
rm \\\;\:\$\"\\\'
Просто экранируйте всех персонажей одним \
.
решение2
Вы можете попробовать ls -li
в каталоге, содержащем файл, и удалить файл с возвращенным инодом, выполнив командуfind . -inum <inode-number> -exec rm -i {} \;
Я добавил -i
к команде find запрос на удаление в случае, если команда find найдет другой файл, а не тот, который вы ожидаете.
В дополнение к комментарию я попытался создать и удалить файл самостоятельно:
ls -l
total 0
-rw-r--r-- 1 test test 0 mrt 24 14:11 \;:$"\'
[test@testhost +1] /tmp/ff$ rm \\\;\:\$\"\\\'
[test@testhost +1] /tmp/ff$ ls -l
total 0
решение3
Вы можете использовать одинарные кавычки, и тогда вам придется беспокоиться только о том, как закавычить сами одинарные кавычки.
rm '\;:$"\'\'
При интерактивном использовании вы можете просто использовать автодополнение Tab, начиная с '\
или \\
. Автодополнение Tab из '\
yields '\;:$"\'\'''
, так как bash просто заменяет каждую встроенную одинарную кавычку на '\''
. Автодополнение Tab из nothing или из \\
yields \\\;\:\$\"\\\'
.
решение4
Если вы не ограничены использованием bash или другой среды сценариев оболочки, простым способом удалить такой файл, вероятно, будет либо написать короткую программу, которая просто вызывает unlink()
ваш любимый язык, либо использовать файловый менеджер, такой как Gnome Commander или Midnight Commander, чтобы удалить файл вручную. Последний вариант позволит вам выбрать нужный файл и удалить его, не вводя нигде его имя, что исключит возможность того, что метасимволы вообще будут иметь какое-либо особое значение.