¿Cómo puedo eliminar un archivo llamado ">"?

22

Estaba ejecutando un script de Python que no funcionaba bien y solía sudocrear un archivo llamado >.

¿Cómo puedo deshacerme de este archivo?

Por supuesto, cuando lo intento sudo rm >, aparece el error bash: syntax error near unexpected token 'newline', porque cree que estoy tratando de redirigir la salida de rm.

Sus permisos son -rw-r--r--.

Una persona
fuente
10
Las respuestas son correctas, por supuesto, pero en general podría considerar esto: ¿cómo se creó el archivo en primer lugar? (Por supuesto, sudo touch >en un shell daría el mismo error.) Dijiste que era con un script de Python, presumiblemente creado al pasar ">"a alguna osfunción. Entonces sudo python <<< 'import os; os.remove(">")'debería funcionar bien.
wchargin
44
Esto me recordó un error en ventanas en las que, literalmente, no podía borrar un archivo con un nombre determinado (pero no había ningún problema por lo que es.)
PyRulez
PyRulez ooh, cual?
Austin Burk
8
Irónicamente, la respuesta está en el título que escribiste tú mismo.
Raphael

Respuestas:

54

Cualquiera de estos debería funcionar:

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

Tenga en cuenta que los dos últimos comandos, los que usan find, encontrarán todos los archivos o directorios nombrados >en la carpeta actual y todas sus subcarpetas. Para evitar eso, use GNU find:

sudo find . -maxdepth 1 -name '>' -delete
sudo find . -maxdepth 1 -name '>' -exec rm {} +
terdon
fuente
2
Probablemente valga la pena señalar que findno es así rmporque es recursivo y eliminará todos los archivos nombrados rmbajo su árbol de directorios actual, sin importar cuán profundo sea.
jw013
66
@rahul Las tres primeras (las rmvariantes) son todas iguales. Son solo tres formas diferentes de proteger ese nombre de archivo del shell. Realmente no hay una razón para preferir uno sobre otro.
derobert
77
¿Por qué sugieres find(1)? El único problema aquí es que es necesario citar un metacarácter de shell. Hay un millón y uno de programas diferentes que pueden eliminar un archivo, pero usar otra cosa que no rm(1)sea ​​ofuscar la respuesta.
camh
2
No necesita GNU find para evitar recurrencias. sudo find . ! -name . -prune -name '>' -exec rm {} +.
hvd
2
Estoy de acuerdo con @camh, findno agrega nada para responder la pregunta que se hace.
Paul Draper
18

También puedes usar Python para eliminarlo:

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

Con POSIX find:

find . ! -name . -prune -type f -name '>' -exec rm -f {} +
Cuonglm
fuente
3
¿Por qué molestarse? El shell proporciona muchas formas de evitar interpretar >como redirección de salida.
alexis
3
@alexis imo es mejor saber tantas formas de lograr estas tareas simples como sea posible. si op tiene otro problema como este que es más difícil de resolver simplemente con el shell, tendrán otra herramienta en su caja de herramientas para intentarlo
undergroundmonorail
1

Lo que terminé haciendo inicialmente también funciona:

sudo sh -c "rm \>"

Esto es, por supuesto, una variante del más simple sudo rm \>.

Una persona
fuente
0

Intenté esto como un comentario, pero salió todo en una línea

[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]~% 
Harry Weston
fuente
Sin embargo, esto ya está en la respuesta de terdon ...
John WH Smith
Sí, en parte se da en la respuesta del tendón, estoy de acuerdo, solo pensé que esta secuencia es simple y la hice explícita. Como verá, traté de incluirlo como un comentario en lugar de una respuesta, pero no sé cómo evitar que todo salga en una línea. También muestra que no necesita Python para crear el archivo, otro punto también sugerido en otros comentarios.
Harry Weston
0

Cita el personaje para que el shell no lo interprete como una redirección:

sudo rm '>'

Sin embargo, si tiene otros archivos con caracteres extraños, el método más seguro es abrir un explorador de archivos GUI como nautilusy eliminarlo allí.

Cyker
fuente