Инструменты Unix: что делать, если имя файла не содержит какой-либо орфографической информации?

Инструменты Unix: что делать, если имя файла не содержит какой-либо орфографической информации?

Я всегда задаюсь вопросом: большинство инструментов GNU/Unix принимают опции в форме "минус что-то", иногда за которыми следует аргумент. Что, если у вас есть файл с именем минус что-то?

$ ls
-f
$ rm -f
$ ls
-f
$ mv -f abc
mv: missing destination file operand after `abc'
Try `mv --help' for more information.
$ cat -f
cat: invalid option -- 'f'
Try `cat --help' for more information.

или

$ ls
-ohello.c
$ gcc -ohello -ohello.c
gcc: fatal error: no input files
compilation terminated.

Это просто из любопытства; у меня нет примера использования этого.

решение1

Чтобы удалить файл с именем -x, используйте rm -- -x( --означает конец параметров) или rm ./-x.

решение2

Довольно часто задают этот тип вопросов в интервью. Обычный способ обработки файлов с тире:

$ rm -- -f
$ rm ./-f

решение3

Распространенный вопрос в Unix. Основной способ — указать полный путь к файлу, чтобы не было тире перед ним:

$ rm -file.txt
unknown option -l

$ rm ./-file.txt    #No problem!
$ rm $PWD/-file.txt #Same thing

Некоторыйкоманды, вы можете использовать тире само по себе (или двойное тире) для завершения опций. Однако это не обязательно верно для всех команд или даже для одной и той же команды в разных системах.

$ rm -- -file.txt   #Works on Linux but not on some Unix systems

решение4

вам нужно использовать

  rm -- <filename>

Бывший:

  rm -- -f

Связанный контент