`-Rf` adlı bir dosyayı kaldırmak için hangi komutu kullanmam gerekiyor?


67

Dosya sistemimde bir dosya oluşturan bir noktada çılgınca bir şey yaptım -rf.
Şimdi nasıl sileceğimi bilemiyorum ...

Denedim:

rm "-rf"
rm \-rf

Bunlar hemen çıkar, arrgh!

Bu dosyayı nasıl kaldıracağınızı bilen var mı? Tercihen tüm dosyamı yanlışlıkla temizlemeden.


33
Kesin sözdizimini hatırlamadan bazı sinirler sisteminizden rmdenilen bir dosyaya çalışıyor -rf!
ChristopheD

3
Bu işe yaramazsa neden açıklamak için: Tırnaklar ve kabuğundan (tipik bash) tarafından işlendiğinden görülen çıkış ve ardından ayrıştırma sonucu geçirilir rm(öyle de argcve argvdizideki bu sonucun hem Dolayısıyla) ["rm", "-rf"]geçirilen rm, Beklediğiniz şeyi yapar.
Thanatos

3
Bunun Unix ve Linux stackexchange'ten
frabjous

12
Eski bir tıkaç, *bir klasöre adlandırılmış bir dosyayı almaktır . -rfAynı zamanda bir tane de ekleyin ve eğlenceyi izleyin ;-)
RBerteig

@RBerteig: mkdir './-rf '(bir kabuk takma adında ortak bir varsayılan olan ls --classify, a / i ekler)

Yanıtlar:


127
unlink -rf

Veya

rm -- -rf

47
Bu, IMO'yu öğrenmek için en faydalı çözümdür, çünkü '-', argümanları durdurmak için GNU araçlarında standardize edilmiştir
Nathan O'Sullivan

1
Kullanarak daha doğru bir şey olmak GNUgetopt vardır --en modern linux araçlarını anlamına gelmelidir.
Geoffrey Zheng,

60

Başka seçenek:

rm ./-rf

... geçerli dizininizi varsayarız, dosyanın bulunduğu yer.


34

Alternatif olarak, her zaman dizini içinde düzenleyebilir ve dosyayı bu şekilde kaldırabilirsiniz.

vim .

ve sonra sadece üzerinde dosya bulunan satırı silin (D, dd çalışmıyor).


5
iyi numara! [Birkaç yararsız karakter]
Sergio Acosta

Bunun, bu öğleden sonra bu cevabı ilk gördüğümde sahip olduğu olumsuzlukları hak ettiğini düşünmedim, ancak vimbir yönlendirilmiş modu olduğunu doğrulamak için bir şansım olmadı . Açıkçası, asıl dizinin kendisini bir metin editöründe düzenlemek ne tavsiye edilir ne de gerçek uzman çember atlaması olmadan mümkün değildir. Bunun emacsda işe yarayacağını ve aynı sebepten dolayı not alın.
RBerteig

1
Akıllı Vim kullanımı için ekstra puan! :)
Pierre-Antoine LaFayette

bilmek güzel;)
schöppi 21:10

25

Garip dosya adlarını silmek için genel bir teknik kullanmaktır.

 ls -li

inode dosyasını bulmak için tuşunu kullanın.

find ./ -inum <number of file> -delete

Tüm özel durumları hatırlamanıza gerek yok.


4
findDosyaları silme yetkisi olduğunu bilmiyordum .
zneak

Bu aynı zamanda, kutunuzdaki iyi bir GNU’ya erişebilmeniz koşuluyla, bilinmeyen adlara sahip dosyaları (geri al karakterleriyle başlayarak ya da sonunda boşluk bırakarak veya daha fazla boşluk bırakarak) yakalamak için mükemmeldir.
Olfan,

17

"Rm - -filename" numarası hakkında bir şey bilsem de, genellikle bir şekilde öncü bir dosya bulduğumda - çıkarmak istediğim adına bir GUI dosya yöneticisi başlatırım ve oradan bunu yapabilirim, şansını ortadan kaldırmak için Hataların


1
Hiç bir GUI'si olmayabilir, bu nedenle çalışmayabilir.
Wuffers,

12
Aptalca ve yanlış olsaydı, belki de olumsuz bir oyu hak eder, ancak bu cevabı sadece 'işe yaramayabilir' diye indirmeye inanmıyorum. Bu öneriye hiçbir zarar gelmez.
JT.WK

4
X'siz

9

Sadece emin olmak istiyorsan:

 mv -- -rf remove.-rf
 [[check]]
 rm remove.-rf

4

Taş Devri'ne geri döndüğünüzü hissettiğiniz bazı GNU Unix'lerde olmanız durumunda ( --sözdizimi yok, -inumanahtar bulmuyorsunuz, bağlantıyı kaldır komutu yok, editörünüz dizin düzenlemeyi reddediyor vs.) hala kendinize yardımcı olabilirsiniz:

find . -name '-rf' -print | xargs rm -i

Bu, tüm potansiyel adayları rm'ye beslemesine neden olacak ve bu da beslendiği her bir dosya için izin / reddetme talebinde bulunacaktır.

Durumda senin rmbile desteklemez -i(PA-RISC üzerinde 1.1 kimseyi HP-UX 10.2?) Anahtarı, sadece daha dikkatli olun:

find . -name '-rf' -print
# check that find's output is exactly and only what you need to delete
find . -name '-rf' -print | xargs rm

Ya sisteminizde yoksa find?
Yalan Ryan,

Bu gerçekten de kötü olurdu. Ne yazık ki, henüz bir tane Unix kurulumuyla tanışmadım. Bana bir işaretçi verebilir misin?
Olfan

Bazı düşünceler vererek, cevabım sunucuya sorulan sorulardan daha uygun olurdu. Süper Kullanıcıların, bahsettiğim kadar eski makinelere sahip olmaları pek mümkün değildir. Ve bunu yapanlar kendilerine yardım etmeyi öğrenmiş olacaklar. ;-)
Olfan

1, @Olfan, you savunmasında, az önce biri bir dolaba eski unix karşılaşmak yere hala gelen ipuçlarını öğrenmek için bir kaynak gerekir ...
RBerteig

3

Jleedev'in cevabını destekleyerek şunları geliştiririm:

rm -i -- -rf

Etkileşimli modda olmak ve onay istemek için ne sildiğinizden emin olabilirsiniz. (çözüm yolunda olsa da, sadece rahatınız için)

Aslında, şunu bile kullan:

\rm -i -- -rf

takma ad kullanmadığınızdan emin olmak için.


2

Zaten önerildiği gibi, her zaman sözdizimini kullandım.

rm -rf -- filename

önek olarak bir çizgi ile bir dosyayı kaldırmak zorunda kaldım çünkü - komutunu başka bir parametre aramak için değil sadece dosya isimleri diyor.

Önemli klasörümü yanlışlıkla dosya silme ile korumak amacıyla , * aramasını çözerken normalde dosya listesinin başına konan basitçe -i adında boş bir dosya oluşturmak için kullandım . Öyleyse komut

rm -rf *

korumalı klasörüme atandığında komutun yürütüldüğü sırada yürütülürken:

rm -rf -i filename1 filename2 .... (all the other files in the folder)

ve kabuk, hemen her şeyi silmek yerine, onay istemeyi durdurur (-i seçeneğinin gerektirdiği gibi).


-iDosya adı kesmek için +1 - "Ben" şüpheciydi, ama test ediyor!
rymo

2

En son bu problemim olduğunda, şunu çözdüm:

piton

ithal os

os.remove ( "- rf")


1

martin clayton haklı.

Çok basit ve mantıklı. Eğer seçenekler varsa, her zaman -XXXya da --CCCCöylesine koyarsanız ./ya da tam yol -rfbir seçenek olarak kabul edilemez ve normal bir dize olarak kabul edilir.

"Hepsi" garip dosya isimleri ile çalışır.

#pwd
/ Tmp / TEST
#touch ./-rf
#ls 
rf
#rm ./-rf 
#ls
#

1

rm - -rf çoğu gnu aracı kabul eder - seçeneklerin sonunun işareti olarak

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.