Ferramentas Unix: e se um arquivo tiver o nome menos alguma coisa?

Ferramentas Unix: e se um arquivo tiver o nome menos alguma coisa?

Estou sempre me perguntando: a maioria das ferramentas GNU/Unix aceita opções na forma "menos alguma coisa", às vezes seguidas por um argumento. E se você tivesse um arquivo chamado menos alguma coisa?

$ 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.

ou

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

Isto é apenas por curiosidade; Não tenho um caso de uso para isso.

Responder1

Para remover um arquivo chamado -x, use rm -- -x( --significa fim das opções) ou rm ./-x.

Responder2

É bastante comum fazer esse tipo de pergunta em ambientes de entrevista. Uma maneira comum de lidar com arquivos com travessões é:

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

Responder3

Uma pergunta comum no Unix. A principal forma é fornecer o nome completo do caminho do arquivo, para que ele não tenha um travessão na frente:

$ rm -file.txt
unknown option -l

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

Algunscomandos, você pode usar um travessão sozinho (ou um travessão duplo) para finalizar as opções. No entanto, isso não é necessariamente verdade com todos os comandos, ou mesmo com o mesmo comando em sistemas diferentes.

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

Responder4

você tem que usar

  rm -- <filename>

Ex:

  rm -- -f

informação relacionada