Excluindo um diretório UNIX com um hífen no nome

13

Através de uma manobra idiota da minha parte, criei acidentalmente um diretório chamado (por exemplo) -A, e acabei preenchendo-o com arquivos.

Eu quero deletar o dito diretório. Eu tentei:

rmdir -- -A

mas depois me diz que o diretório ainda tem arquivos nele. E não consigo descobrir como fazer o cd no diretório para excluir os arquivos.

O que devo fazer para me livrar deste diretório problemático?

    
por Keith B 28.07.2009 / 16:37

7 respostas

29

Use - em todos os comandos.

$ ls -la
total 32
drwxr-xr-x  3 richard  richard  512 Jul 28 15:44 .
drwxr-xr-x  3 root     wheel    512 Jul  6 17:10 ..
$ mkdir -- -A
$ ls -la
total 36
drwxr-xr-x  2 richard  richard  512 Jul 28 15:44 -A
drwxr-xr-x  4 richard  richard  512 Jul 28 15:44 .
drwxr-xr-x  3 root     wheel    512 Jul  6 17:10 ..
$ cd -- -A
$ ls
$ pwd
/home/richard/-A
$ cd ..
$ rm -rf -- -A
$ ls -la
total 32
drwxr-xr-x  3 richard  richard  512 Jul 28 15:44 .
drwxr-xr-x  3 root     wheel    512 Jul  6 17:10 ..
    
por 28.07.2009 / 16:46
11

Você pode colocar ./ na frente do arquivo - dessa forma, rm ou rmdir não se comportará como se o nome do arquivo fosse um sinalizador de opção.

Você também pode emitir a opção - que diz ao rm para agir como se tudo após o - fosse um nome de arquivo e que ele não processasse mais opções. Pode haver versões mais antigas do rm que não obedecem, embora meu zoológico de antigos unixes tenha ficado bem pequeno hoje em dia, então não posso dizer quais ou se há versões que não entendem -. / p>

Você deve adquirir o hábito de colocar o ./ na frente dos nomes quando estiver apagando de qualquer forma - você nunca sabe se existe um arquivo -r ou -rf em seu diretório. Você poderia dizer que você deve sempre usar o - mas eu acho que o ./ é mais natural, porque torna explícito que "eu quero excluir arquivos neste diretório, não o que acontece * a glob para fora"

    
por 28.07.2009 / 17:06
4

Renomeie e lide com isso normalmente:

$ mv -- -A foo
$ find foo
$ rm -rf foo
    
por 28.07.2009 / 17:35
2

O rmdir não irá excluir um diretório com nada dentro dele. "rm -rf" vai. rmdir é consideravelmente mais seguro que "rm -rf". A resposta de Moo ainda é provavelmente a melhor.

    
por 28.07.2009 / 17:16
1
rm -fr ./-A

O comando acima funciona para mim.

    
por 08.09.2017 / 18:05
0

Um método diferente seria excluir por inode (isso funciona para arquivos / diretórios com outros caracteres que são difíceis de excluir com apenas rm).

bash-3.2$ ls -i
4905937 angry-1.gif
5174052 hermes
5172770 make_hosts.pl
bash-3.2$ find . -inum 5172770 -exec rm -f {} \;
bash-3.2$ ls -i
4905937 angry-1.gif
5174052 hermes
bash-3.2$
    
por 28.07.2009 / 20:46
0

find pode excluir o diretório desta maneira:

find . -type d -iname '-A' -delete
    
por 28.07.2009 / 21:51