“>” Adlı bir dosyayı nasıl silebilirim?


22

Arızalı ve sudoadında bir dosya oluşturmak için kullanılan bir Python betiği çalıştırıyordum >.

Bu dosyadan nasıl kurtulabilirim?

Tabii ki denediğimde sudo rm >hata alıyorum bash: syntax error near unexpected token 'newline'çünkü çıktıyı yönlendirmeye çalıştığımı düşünüyor rm.

İzinleri -rw-r--r--.


10
Cevaplar elbette doğrudur, ancak genel olarak şunu düşünebilirsiniz: dosya ilk etapta nasıl yaratıldı? (Tabii ki, sudo touch >bir kabukta aynı hatayı verirdi.) Bir Python betiği olduğunu söylemiştiniz, muhtemelen ">"bazı osişlevlere geçerek yaratılmış . Öyleyse sudo python <<< 'import os; os.remove(">")'iyi çalışmalı.
wchargin

4
Bu bana tam anlamıyla belli bir isimle bir dosyayı silemediğiniz pencerelerdeki bir hatayı hatırlattı (ancak bunu yapmakta bir sorun yoktu.)
PyRulez

PyRulez ooh, hangisi?
Austin Burk,

8
İronik olarak, cevap yazdığınız başlıkta.
Raphael,

Yanıtlar:


54

Bunlardan herhangi biri çalışmalı:

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

Kullanılan son iki komutun, geçerli klasörde ve tüm alt klasörlerinde adı verilen tüm dosyaları veya dizinleri findbulacağını unutmayın . Bundan kaçınmak için GNU find'ı kullanın:>

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

2
Özyinelemeli olduğu ve ne kadar derin olursa olsun, geçerli dizin ağacınızın altında adlandırılan her dosyayı sileceği için, findböyle olmadığını belirtmeye değer . rmrm
jw013

6
@rahul İlk üç ( rmdeğişken) hepsi aynıdır. Bu dosya adını kabuktan korumanın sadece üç farklı yolu var. Birini diğerine tercih etmenin bir nedeni yok.
derobert

7
Neden önerirsiniz find(1)? Buradaki tek sorun, bir kabuk meta karakterinin alıntılanması gerekmesidir. Bir dosyayı kaldırabilecek milyonlarca farklı program var, ancak rm(1)yanıtı engellemekten başka bir şey kullanmak .
camh

2
Özyinelemeyi önlemek için GNU bulmaya ihtiyacınız yoktur. sudo find . ! -name . -prune -name '>' -exec rm {} +.
hvd

2
@Camh ile aynı fikirdeyim, findsorulan soruyu cevaplamak için hiçbir şey eklemiyor .
Paul Draper

18

Python'u kaldırmak için de kullanabilirsiniz:

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

POSIX ile find:

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

3
Neden rahatsız ediyorsun? Kabuk, >çıkış yönlendirmesi olarak yorumlanmamak için birçok yol sunar .
alexis,

3
@alexis imo Bu basit görevleri yerine getirmenin mümkün olduğunca çok yolunu bilmek en iyisidir. op'un tamamen kabuğuyla çözmesi daha zor olan başka bir sorunu varsa, deneyecek bir alet kutusu içinde başka bir araca sahip olacaklar
undergroundmonorail

1

Başlangıçta ne yaptım da işe yarıyor:

sudo sh -c "rm \>"

Bu, elbette, daha basit bir çeşittir sudo rm \>.


0

Bunu bir yorum olarak denedim ama hepsi bir satırda çıktı

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

Bu zaten terdon'un cevabında olsa da ...
John WH Smith

Evet, kısmen tendonun cevabında verilmiştir, katılıyorum, sadece bu sıranın basit olduğunu ve açık olduğunu düşündüm. Gördüğünüz gibi, bir cevap yerine yorum olarak eklemeyi denedim, ama hepsinin bir satırda ortaya çıkmasını nasıl önleyeceğimi bilmiyorum. Ayrıca dosyayı oluşturmak için Python'a ihtiyacınız olmadığını, başka açıklamalarda da önerilen başka bir noktayı gösterir.
Harry Weston,

0

Karakteri, kabuk tarafından yeniden yönlendirme olarak yorumlanmaması için alıntı yapın:

sudo rm '>'

Ancak, garip karakterlere sahip başka dosyalarınız varsa, en güvenli yöntem orada bir GUI dosya gezgini açmak nautilusve orada silmek.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.