Rm dosyasının bir dosya bulunmadığını bildirmesini nasıl önleyebilirim?


155

rmBirçok dosyayı silmek için bir BASH betiği içinde kullanıyorum . Bazen dosyalar mevcut değildir, bu nedenle birçok hata bildirir. Bu mesaja ihtiyacım yok. Adam sayfasında rmsessiz yapmak için bir komut aradım , ancak bulduğum tek seçenek -f, "varolmayan dosyaları yoksay, asla sorma" açıklamasından doğru seçim gibi görünen, ancak ad uygun görünmüyor , bu yüzden bunun istenmeyen sonuçları olabileceğinden endişeliyim.

  • -fseçenek susturmak için doğru yolu rm? Neden çağrılmıyor -q?
  • Bu seçenek başka bir şey yapıyor mu?

4
-f kullanmak istemiyorsanız, salt okunur olarak işaretlediğiniz dosyayı kaldırır.
pizza

Yanıtlar:


209

Başlıca kullanımı, kendiliğinden -fkaldırılmayacak dosyaların kaldırılmasını zorlamaktır rm(özel bir durum olarak, varolmayan dosyaları "kaldırır" ve böylece hata iletisini bastırır).

Ayrıca hata mesajını kullanarak yeniden yönlendirebilirsiniz.

$ rm file.txt 2> /dev/null

(veya işletim sisteminizin eşdeğeri). Bir dosyanın gerçekten kaldırılıp kaldırılmadığını görmek için $? aramadan hemen sonra değerini kontrol edebilirsiniz rm.


3
--fGNU Coreutils için geçerlidir rm, ancak yalnızca benzersiz bir kısaltma olduğu için --force. Kısa form -fdaha net ve daha portatiftir.
Keith Thompson

Bunu fark ettiğimden bile emin değilim. --fİşte sadece bir yazım hatası -f.
chepner

2
2 ne yapıyor 2>?
Dan

@Maverick Stderr'a gönderilen tüm mesajları terminale göndermek yerine / dev / null'a yönlendirir.
Benjamin Nolan

73

Evet, -fbunun için en uygun seçenektir.


Bazı sistemler, ters eğik çizgiyi kullanana kadar -f ile bile olsa sizi uyarır.
vimdude

11
@vimdude: "Bazı sistemler" değil; bu davranış, bir kabuk işlevi veya eşleme takma adınız olduğunu rmgösterir rm -i.
Keith Thompson

28

-f doğru işarettir, ancak test operatörü için rm değil

[ -f "$THEFILE" ] && rm "$THEFILE"

bu dosyanın var olmasını ve normal bir dosya olmasını sağlar (dizin, aygıt düğümü vb. değil)


4
Bununla birlikte, bunun bir yarış durumu vardır ve üretim komut dosyalarında kullanılmamalıdır.
tripleee

@Tripleee ne işaret "-f" testi ve dosya kaldırma herhangi bir sırayla tamamlanabilir olduğuna inanıyorum. Bunu yapmanın başka bir yolu: if [ -f "$THEFILE" ]; then rm "$THEFILE"; fitesti ve dosya kaldırma adımlarını açıkça sıralı yapan.
robla

2
@robla bu kod daha ayrıntılı sözdizimi ile aynı şeyi yapar ... &&! = & ... Test her zaman rm'den önce gerçekleşir, ancak ayrı bir işlem rm çalışmadan önce (kabuk olsa da) teknik olarak (çok olası olmasa da) silebilir test yorumlandıktan sonra kod).
technosaurus

technosaurus - ooops, haklısın. Sizce @ mmlac'ın sorusuna en iyi cevap nedir?
robla

3
Ve sadece onaylamak için, yarış durumu bir şey testve arasındaki dosyayı kaldırabilir rm. Burada daha rmönce idam edilemez test. Sıçramadan önce bakmak eşzamanlı programlamada yaygın bir hatadır - aslında "sıçradığınızda" artık "bak" sonucuna güvenemezsiniz; bunun çözümü kilitleme veya atomik işlemler kullanmaktır. Bu tam olarak neden istiyorsun rm -f, bu ikincisinin bir örneğidir.
Üçlü

13

\rm -f file asla rapor bulunamadı.


4
-R gereksiz ve tehlikelidir.
mahemoff

1
Birçok dosya veya dizin varsaydım. Kullanıcının isteğini tekrar okuyun ve haklısınız, yalnızca dosya istiyordu. Cevabım düzeltildi
vimdude

Rm yapmadan önce ters eğik çizgi nedir ?? lütfen beyler buna bir cevap lazım. 3.75 gayet iyi çalışıyor iken windows üzerinde cygwin's yapmak 4.1 \ rm başa çıkamaz.
Ayman Salah

2
@AymanSalah Bu bağlamdaki ters eğik çizgi, gerçekleri saran herhangi bir işlev veya takma addan kaçacaktır rm(1990'ların başında bazı sitelerde yeni başlayanların bir şeyleri kaldırmasını ve ardından dosyaları geri almak için sistem yöneticisini çağırmasını önlemek için popüler olduğu gibi).
Üçlü

Teşekkür ederim - bu benim sorunum çözüldü .. Görünüşe göre çıkış kodu kullanarak &&dosya zincirleme bir kez -f kırmadan olmadan kullanarak sağlar .
Igor

5

rm -f"Başka bir şey" yapmakla ilgili olarak , aksi takdirde sizden onay isteyeceğiniz durumlarda sessizce kaldırılmasını zorunlu -fkılar ( kestirme yol gösterir --force) rm. Örneğin, yazılamayacağınız bir dosyayı, yazılabilir bir dizinden kaldırmaya çalışırken.


-9

Cshell için de aynı sorunu yaşadım. Sahip olduğum tek çözüm, komut dosyamda "rm" den önce desenle eşleşen bir kukla dosya oluşturmaktı.


7
Gerçekten tek çözüm bu muydu ? Denediniz mi rm -fyoksa rm filename >&/dev/null?
Keith Thompson
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.