Sormadan dosyayı kaldır


89

Dosyayı silmek isteyip istemediğini sormadan dosyayı nasıl kaldırabilirim? Ben kabuk betiği yazıyorum ve rm işlevini kullanıyorum, ancak "normal dosya kaldırılsın mı?" ve buna gerçekten ihtiyacım yok. Teşekkür ederim.


5
rm -f, yes | rmvb., ancak bu SU'ya aittir.

4
rmgösterme "normal dosyayı kaldır?" varsayılan olarak bilgi istemi. Buna diğer adı verilmiş rm -iveya bir işlev olarak tanımlanmış olmalısınız . Diğer adın betiğinizin içinde görünmesine şaşırdım. Senaryoyu mu ( ./foo.sh) mı yoksa kaynak mı ( . foo.shveya source foo.sh) çalıştırıyorsunuz?
Keith Thompson

Yanıtlar:


102

Bunu denemek için rmtakma adınız olabilir rm -i:

/bin/rm -f file.log

Takma adlarınızı görmek için koşabilirsiniz alias.


7
Alternatif olarak, takma adı / işlevi atlamak için command rm ...veya \rm ...kullanın
glenn jackman

6
rmTakma adın rm -ikötü bir fikir olduğu iddia edildi . rmKomut, varsayılan olarak, sessizce adlı dosya kaldırır. Bunu takma ad vererek rm -i, sizi kurtarmak için etkileşimli istemine bağlı olarak Enter tuşuna basmadan önce dikkatlice kontrol etmeme alışkanlığını elde edebilirsiniz. Sonra rm some-important-filetakma adı olmayan bir ortama girersiniz.
Keith Thompson

@Keith Bu çok doğru, sadece şahsen rm -v ile rm -v
chown

1
Eğer "rm" bir fonksiyon ise (takma ad yerine) bu cevap işe yaramalı. Ve bash unsetkomutu ilginç olabilir
Xen2050

56

Kuvvet bayrağı tüm istemleri kaldırır;

rm -f {file}


2
Bu benim aradığım şey, kabul edilen cevap değil.
gsamaralar

30

Güç seninle olsun - rm -f


5
Ben zaten lynks'in cevabını aştım ve bu tamamen aynı. Sadece mizah duygusu için olumlu
yağmur_

Sadece birileri SO'da mizah duygusu bulduğundan hem yorumu hem de yanıtı geri aldım ...
Mac

5

Bir kabuk betiği içinde kullanmak istersiniz, rm -f <filename>ancak kabuğunuza (veya profilinize) -igirerek ortamınız için örtük seçeneklerden kurtulma seçeneğiniz de vardır unalias rm.


unalias rmCentOS'ta çalışmıyor mu? Amazon Linux?
Suncatcher

5

yesprogram sürekli tüm bilgi istemlerine evet cevabı. böylece rmistediğiniz efekti elde etmek için etkileşimli programa aktarabilirsiniz .

yes | rm <filename>

tersine, etkileşimli bir şey yapmak istemiyorsanız,

yes n | <something interactive>

ve bu girdi akışında 'n' ifadesini tekrar edecektir (etkili olarak sorulara cevap vermeyin)


Bu yes nseçenek benim için çalışmıyor. Ben kullanırken yes n | rm file.txt, dosya sağ korumalı olsa bile aslında dosyayı kaldırıyor.
30'da

5

Dosyayı silmek için gerekli izniniz varsa ve sorulmasını istemiyorsanız, aşağıdakileri yapın (-f = force):

rm -f file

Dosyaya izniniz yoksa, kullanmanız gerekir:

sudo rm -f file

1
"Normal dosya kaldırılsın mı?" istemi bunun bir izin sorunu olmadığını gösterir.
Keith Thompson

4
\rm file

Ters eğik çizgi \, takma adları atlar.


1
"\" bir ters eğik çizgi, yani?
Cand3r

Evet, rm 'yi takma isimler olmadan kullanmak, istenmeyen onaylama diyalogları \ ile ön eke yol açar.
teknopaul

1

-fParametre kullanmanın dışında , alternatif olarak find, örneğin komutunu kullanabilirsiniz.

find -name file.log -delete

0

Şu anda bash kabuğunun rm komutunun tanımını global konfigürasyon dosyalarından birinde fonksiyon olarak aldığı bir sistemde çalışıyorum:

 rm  () { /bin/rm -i ${1+"$@"}; }

Dolayısıyla, takma adlarla ilgili yukarıdaki cevapların hiçbiri işe yaramadı. Can sıkıcı davranışı önlemek için .bashrc dosyamdaki rm fonksiyonunu ayarlarım

 unset -f rm

Açıcıdan sonra da benzer bir problem yaşadım. Ancak rm, bir kabuk işlevi tarafından gizlenmiş olan olasılığından bahseden bir cevap bulamadım . Bu yüzden cevabı buraya, aynı tip problemle karşı karşıya olan birisinin yardımı olacağını umarak ekledim.

Yazmak /bin/rmveya rm -fher zaman uygun değildir ve (sonuçta) kötü sonuçlar doğurabilir rm -f.


Bu sorununuzu çözmüş olabilir ancak soruyu cevaplamıyor.
şüpheli

Seçilen cevap - arama /bin/rmişi olmaz mıydı? Bash'ta bir işleve sahipsem ve geçerli dizinde aynı isimde çalıştırılabilir bir dosya varsa, ismin ./önüne sadece eklemek , işlevi değil dosyayı çağırır. PS - Bir fonksiyon hakkında seçilen cevaba bir yorum ekledim &unset
Xen2050

Evet, /bin/rmçalışır. Bunu yapmak, unsettam yolu yazma gereksinimini ortadan kaldırır.
şafak

0

Sizin rmtakma adınız varsa rm -i, kullanın unalias rm;

rm -fÇok sayıda yazmaya karşı korumalı dosyayı gerçekten kaldırmak istemediğiniz sürece doğrudan kullanmayın . Kullanmak için çok iyi bir sebep olmalı -f.

Bununla birlikte, çok sayıda yazmaya karşı korumalı dosyanız varsa, rsync -r --delete empty/ removed_dir/daha hızlı bir hızda olmayı tercih edebilirsiniz .


0

Bunu yapmamın en sevdiğim yolu commandbash komutunu kullanmak , tıpkı sizin kullandığınız şekilde sudo. Bu, komutunuzu takma adsız olarak çalıştırır, tıpkı çalıştırdığı gibi /bin/rm(muhtemelen rmolarak takma addır rm -i).

Örnek:

command rm -f /tmp/file.txt

0
rm -Rf <folder-to-be-deleted>

-R: Özyinelemeli f: kuvvet, isteme

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.