Невозможно удалить специальные именованные файлы в терминале - PullRequest
1 голос
/ 26 апреля 2009

Некоторые программы делают мои фиктивные файлы в корневом каталоге, такие как

-1
-2
-3
...
-n

Я запускаю безуспешно

rm -1

и тоже

rm "-1"

Терминал считает, что -1 - это опция.

Как вы можете удалить файлы в терминале?

Ответы [ 2 ]

7 голосов
/ 26 апреля 2009

Вы можете использовать rm ./-1, ./ относится к текущему каталогу, и поскольку параметр не начинается с тире, он не интерпретируется как опция.

5 голосов
/ 26 апреля 2009

Насколько я помню добавление - в качестве опции в командной строке команда rm будет рассматривать все оставшиеся аргументы буквально, поэтому команда

rm -- -1

Удаляет смешные именованные файлы. Обратите внимание, что вы по-прежнему можете использовать шеллок расширения (например, '*' или '?'), Так как оболочка расширяет эти до , когда команда запускается (в отличие от DOS).

Редактировать : Когда я впервые столкнулся с этой проблемой, я не знал о переключателе -, поэтому я написал небольшую программу на c, которая удаляла бы имя файла так же, как и первый аргумент. Это легко сделать, так как все операционные системы posix содержат системный вызов unlink, который удаляет файл с именем, указанным в качестве аргумента (выгрузите в терминал следующее:) 1013 *

remove_arg.c << EOF
#include<unistd.h>
int main(int argc, char **argv){
  unlink(argv[1]);
}
EOF
gcc -o remove_arg remove_arg.c
./remove_arg -1

Это должно работать в любой Unix-системе, хотя вам, возможно, придется изменить gcc на cc или как будет называться ваш локальный компилятор c.

...