Como posso excluir um arquivo chamado ">"?


22

Eu estava executando um script Python que funcionou mal e usado sudopara criar um arquivo chamado >.

Como posso me livrar desse arquivo?

Obviamente, quando tento sudo rm >, recebo o erro bash: syntax error near unexpected token 'newline', porque pensa que estou tentando redirecionar a saída de rm.

Suas permissões são -rw-r--r--.


10
As respostas estão corretas, é claro, mas em geral você pode considerar o seguinte: como o arquivo foi criado em primeiro lugar? (É claro que sudo touch >em um shell daria o mesmo erro.) Você disse que estava com um script Python, presumivelmente criado ao passar ">"para alguma osfunção. Então, sudo python <<< 'import os; os.remove(">")'deve funcionar muito bem.
wchargin

4
Isto lembrou-me da um erro no Windows, onde você literalmente não poderia excluir um arquivo com um certo nome (mas não havia nenhum problema de fazer isso.)
PyRulez

PyRulez ooh, qual?
Austin Burk

8
Ironicamente, a resposta está no título que você escreveu.
Raphael

Respostas:


54

Qualquer um destes deve funcionar:

sudo rm \>
sudo rm '>'
sudo rm ">"
sudo find . -name '>' -delete
sudo find . -name '>' -exec rm {} +

Observe que os dois últimos comandos, aqueles que usam find, encontrarão todos os arquivos ou diretórios nomeados >na pasta atual e todas as suas subpastas. Para evitar isso, use o GNU find:

sudo find . -maxdepth 1 -name '>' -delete
sudo find . -maxdepth 1 -name '>' -exec rm {} +

2
Provavelmente vale ressaltar que findnão é assim rmporque é recursivo e excluirá todos os arquivos nomeados rmna sua árvore de diretórios atual, não importando a profundidade.
Jw013

6
@rahul Os três primeiros (as rmvariantes) são todos iguais. São apenas três maneiras diferentes de proteger esse nome de arquivo do shell. Não há realmente uma razão para preferir um ao outro.
Derobert 30/05

7
Por que você sugere find(1)? O único problema aqui é que um metacaractere do shell precisa ser citado. Existem um milhão e um programas diferentes que podem remover um arquivo, mas usar algo diferente rm(1)é apenas ofuscar a resposta.
Camh

2
Você não precisa encontrar o GNU para evitar recorrências. sudo find . ! -name . -prune -name '>' -exec rm {} +.
hvd 31/05

2
Concordo com @camh, findnão acrescenta nada para responder à pergunta.
Paul Draper

18

Você também pode usar o Python para removê-lo:

python -c 'import os;os.remove(">")'

Com o POSIX find:

find . ! -name . -prune -type f -name '>' -exec rm -f {} +

3
Porque se importar? O shell fornece várias maneiras de evitar a interpretação >como redirecionamento de saída.
alexis

3
@alexis imo, é melhor conhecer o maior número possível de maneiras de realizar essas tarefas simples. se op tem um outro problema como este que é mais difícil de resolver puramente com o shell, eles terão mais uma ferramenta em sua caixa de ferramentas para experimentá-lo com
undergroundmonorail

1

O que acabei fazendo inicialmente também funciona:

sudo sh -c "rm \>"

Esta é, obviamente, uma variante do mais simples sudo rm \>.


0

Eu tentei isso como um comentário, mas saiu tudo em uma linha

[Harry@localhost]~% touch ">"
[Harry@localhost]~% cat > ">"
line 1
line 2
[Harry@localhost]~% cat ">"
line 1
line 2
[Harry@localhost]~% ls -l ">"
-rw-r--r-- 1 Harry Harry 14 Jun  5 12:04 >
[Harry@localhost]~% rm ">"
[Harry@localhost]~% ls -l ">"
ls: cannot access >: No such file or directory
[Harry@localhost]~% 

Isso já está na resposta de terdon, embora ...
John WH Smith

Sim, em parte, é dada na resposta do tendão, concordo, apenas pensei que essa sequência é simples e a tornou explícita. Como você verá, tentei incluí-lo como comentário e não como resposta, mas não sei como evitar que tudo saia em uma linha. Também mostra que você não precisa do Python para criar o arquivo, outro ponto também sugerido em outros comentários.
Harry Weston

0

Cite o caractere para que ele não seja interpretado pelo shell como um redirecionamento:

sudo rm '>'

No entanto, se você tiver outros arquivos com caracteres estranhos, o método mais seguro é abrir um explorador de arquivos da GUI como nautiluse excluí-lo lá.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.