Come posso eliminare un file chiamato ">"?


22

Stavo eseguendo uno script Python che non funzionava correttamente e usato sudoper creare un file chiamato >.

Come posso eliminare questo file?

Naturalmente, quando provo sudo rm >, ottengo l'errore bash: syntax error near unexpected token 'newline', perché pensa che sto cercando di reindirizzare l'output dirm .

Le sue autorizzazioni sono -rw-r--r--.


10
Le risposte sono giuste, ovviamente, ma in generale si potrebbe considerare questo: come è stato creato il file in primo luogo? (Certo, sudo touch >su una shell darebbe lo stesso errore.) Hai detto che era con uno script Python, presumibilmente creato passando ">"a qualche osfunzione. Quindi sudo python <<< 'import os; os.remove(">")'dovrebbe funzionare bene.
wchargin,

4
Questo mi ha ricordato l'unico bug di Windows in cui non si poteva letteralmente eliminare un file con un certo nome (ma non ci sono stati problemi a
crearlo

PyRulez ooh, quale?
Austin Burk,

8
Ironia della sorte, la risposta è nel titolo che hai scritto tu stesso.
Raffaello

Risposte:


54

Ognuno di questi dovrebbe funzionare:

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

Si noti che gli ultimi due comandi, quelli che utilizzano find, troveranno tutti i file o le directory nominati >nella cartella corrente e in tutte le sue sottocartelle. Per evitarlo, usa GNU find:

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

2
Probabilmente vale la pena sottolineare che findnon è come rmperché è ricorsivo ed eliminerà tutti i file nominati rmsotto l'albero di directory corrente, indipendentemente dalla profondità.
jw013,

6
@rahul I primi tre (le rmvarianti) sono tutti uguali. Sono solo tre modi diversi di proteggere quel nome file dalla shell. Non c'è davvero un motivo per preferire l'uno all'altro.
derobert,

7
Perché mi consigli find(1)? L'unico problema qui è che un metacarattere conchiglia deve essere citato. Esistono un milione e uno di programmi diversi che possono rimuovere un file, ma usare qualsiasi cosa diversa da quella che rm(1)sta semplicemente offuscando la risposta.
Camh,

2
Non è necessario trovare GNU per evitare il ripetersi. sudo find . ! -name . -prune -name '>' -exec rm {} +.
hvd,

2
Sono d'accordo con @camh, findnon aggiunge nulla per rispondere alla domanda posta.
Paul Draper,

18

Puoi anche usare Python per rimuoverlo:

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

Con POSIX find:

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

3
Perché preoccuparsi? La shell offre molti modi per evitare l'interpretazione >come reindirizzamento dell'output.
alexis

3
@alexis imo è meglio conoscere quanti più modi possibili di compiere questi semplici compiti. se op ha un altro problema come questo che è più difficile da risolvere esclusivamente con la shell, avranno un altro strumento nella loro cassetta degli attrezzi per provarlo
undergroundmonorail

1

Quello che ho finito per fare inizialmente funziona anche:

sudo sh -c "rm \>"

Questa è, ovviamente, una variante del più semplice sudo rm \>.


0

Ho provato questo come commento ma è uscito tutto su una riga

[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]~% 

Questa è già nella risposta di Terdon, però ...
John WH Smith il

Sì, è in parte dato nella risposta del tendine, sono d'accordo, ho solo pensato che questa sequenza fosse semplice e l'ho resa esplicita. Come vedrai ho provato a includerlo come commento anziché come risposta, ma non so come evitare che tutto venga pubblicato su una riga. Mostra anche che non è necessario Python per creare il file, un altro punto suggerito anche in altri commenti.
Harry Weston,

0

Cita il personaggio in modo che non sia interpretato dalla shell come un reindirizzamento:

sudo rm '>'

Tuttavia, se si dispone di altri file con caratteri strani, il metodo più sicuro è quello di aprire un file explorer GUI come nautilused eliminarlo lì.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.