Unix'te, mevcut dizindeki ve altındaki her şeyi nasıl kaldırırsınız?


Yanıtlar:


166

Güvenli bilgi işlem uygulayın. Basitçe hiyerarşide bir seviye yukarı çıkın ve joker karakter ifadesi kullanmayın:

cd ..; rm -rf -- <dir-to-remove>

İki çizgi --anlatmak rmo <dir-to-remove>bir çizgi ile başlar bile, bir komut satırı seçeneği değildir.


8
Bu neden daha güvenli?
Yen

34
Çünkü özellikle adlandırılmış bir dizinle eşleşiyorsunuz ve bu nedenle silmek istemediğiniz bir şeyi silme olasılığınız daha düşük.
tvanfosson

5
Doğru. Bunu oldukça kolay yaparken görebiliyordum.
Yen

26
dizinin kendisini de silmez mi? Daha sonra mkdir <dir-to-remove> yapmanız gerekir. Ancak bu dizine atıfta bulunan herhangi bir sabit bağlantı, daha sonra ayrı bir dizin olacaktır.
Johannes Schaub - litb

5
@Yen, eğer kullanırsanız rm ./, kazara rm . /felaket olabilecek yazabilirsiniz .
irfandar

44

Geçerli olanın altındaki tüm dosyaları / dizinleri siler.

find -mindepth 1 -delete

Adına sahip olduğunuz başka bir dizin için de aynısını yapmak istiyorsanız, bunu isimlendirebilirsiniz.

find <name-of-directory> -mindepth 1 -delete

Yalnızca alt dizinlerini ve dosyalarını değil, aynı zamanda dizinin kendisini de kaldırmak istiyorsanız atlayın -mindepth 1. -deleteKaldırılacak şeylerin bir listesini almak için olmadan yapın .


Alt dizinlerdeki tüm dosyaları silmem gerekiyordu, ancak alt dizinleri kendileri silmek istemedim. find <name-of-direcotry> -mindepth 2 -delete harika çalıştı!
Tim Dearborn

-mindepth 1Bir dizin ( find <name-of-directory> -mindepth 1 -delete) belirtiyorsanız ihtiyacınız olacaktır . Aksi takdirde Johannes haklı, mevcut çalışma dizinini (kullanırken find -delete) silmeyecek .
Weboide

IMO, bu özellikle senaryolarda en iyi cevaptır.
wizonesolutions

1
Denedim: find -mindepth 1 -deleteama anladım illegal option -- mama zihin derinliği seçeneğini kaldırdığımda harika çalıştıfind . -delete
sharon

41

Her zaman yaptığım şey yazmaktır

rm -rf *

ve sonra ESC- * tuşuna basın ve bash, * öğesini geçerli çalışma dizinindeki dosya ve dizinlerin açık bir listesine genişletir.

Avantajlar:

  • ENTER tuşuna basmadan önce silinecek dosyaların listesini inceleyebilirim.
  • Komut geçmişi, joker karakteri bozulmadan "rm -rf *" içermeyecektir, bu daha sonra yanlışlıkla yanlış yerde yanlış zamanda yeniden kullanılabilir. Bunun yerine, komut geçmişi gerçek dosya adlarına sahip olacaktır.
  • Ayrıca bir veya iki kez "bir saniye ... hangi dosyaları sildim?" Dosya adları, terminal geri kaydırma arabelleğinde veya komut geçmişinde görülebilir.

Aslında, bunu o kadar çok seviyorum ki .bashrc'deki bu satırla onu TAB için varsayılan davranış haline getirdim:

bind TAB:insert-completions

--Bu cevabın eksik mi? Bu yaklaşım genel olarak harika olduğunu söylemeliyim.
Ben Voigt

bunu sudo ile çalıştırmak daha iyi bir yol
Abbas Torabi

22

kullanım

rm -rf *

Güncelleme: .Mevcut dizini ifade eder, ancak bunu kullanamayız. Komut, .ve için açık kontrollere sahip görünüyor ... Bunun yerine genel arama karakterini kullanın. Ancak bu riskli olabilir.

Daha güvenli bir IMO sürümü kullanmaktır:

rm -ri * 

(bu, her dosyayı / dizini silmeden önce sizden onay ister.)


13
"Riskli olabilir" son derece özlüdür.

5
Böyle şeyler yaparken hızlı bir ls -r buldum. önce neyi sileceğinizi görmenizi sağlar. Tüm diski silmeyeceğiniz konusunda hızlı bir fikir vermek için faydalıdır ...
Rich Bradshaw

2
Neden rm -rf <altdizin-adı> 'ndan daha riskli?
Yen

2
@Yen - çünkü yanlış yerde yaparsanız feci sonuçlar elde edebilirsiniz. Belirli bir adı yanlış yerde kullanmak, yalnızca aynı alt dizin orada mevcutsa yanlış olabilir.
tvanfosson

1
Çocukta ikamet ederken muhtemelen ebeveyni silemezsiniz.
Dirkgently

6

rm –rf .Herhangi bir alt dizinler ve içerikleri de dahil olmak üzere mevcuttaki her şeyi doğrudan kaldıracağı doğrudur . Tek nokta ( .) geçerli dizini anlamına gelir. yapmak için değil dikkatli olmak rm -rf ..çünkü çift nokta ( ..) önceki dizin anlamına gelir.

Bununla birlikte, eğer benim gibiyseniz ve aynı anda birden fazla terminal pencereniz varsa, güvende olsanız iyi olur ve rm -ir .nedenini anlamak için Komut argümanlarına bakalım.

İlk olarak, rmcommand man sayfasına ( man rmçoğu Unix altında) bakarsanız –r, "dizinlerin içeriğini özyinelemeli olarak kaldırın" anlamına geldiğini fark edersiniz . Yani, rm -r .tek başına yapmak , geçerli dizindeki her şeyi ve altındaki her şeyi silecektir.

In rm –rf .ilave -f yollara "asla istemi, varolmayan dosyaları görmezden". Bu komut, geçerli dizindeki tüm dosyaları ve dizinleri siler ve sizden bunu gerçekten yapmak istediğinizi onaylamanızı asla istemez. -fKomutu ayrıcalıklı bir kullanıcı altında çalıştırırsanız özellikle tehlikelidir, çünkü herhangi bir dizinin içeriğini gerçekten istediğinizden emin olma şansı olmadan silebilirsiniz.

Öte yandan rm -ri ., -ibu -f"herhangi bir kaldırmadan önce istemi" anlamına gelir. Bu, rm gitmeden tüm dosyalarınızı mutlu bir şekilde silmeden önce "oups! İstediğim bu değil" deme şansınız olacağı anlamına gelir.

İlk sysadmin günlerimde rm -rf /, tam ayrıcalıklarla (kök) oturum açarken bir sistemde bir sistem yaptım . Sonuç, sistemi yedeklerden geri yüklemek için iki gün geçti. Bu yüzden şimdi istihdam ediyorum rm -ri.


6

Peki ya:

rm -rf "$(pwd -P)"/* 

27
jQuery çok güçlü.
Pawel

5
rm  -rf * 

Yapmayın! Tehlikeli! DOĞRU REHBERDE OLDUĞUNUZDAN EMİN OLUN!


4

yapmak emin sen doğru dizinde bulunan

rm -rf *

2
Bu, adı bir nokta ile başlayan dosyaları veya alt dizinleri silmez.

1
doğru. benim testlerimde rm -rf de yok. tvanfosson "cd ..; rm -rf <dir-to-remove>" ile en iyi çözüme sahip IMO'ya sahip
digitaljoel

2

Bu en basit güvenli ve genel çözüm muhtemelen:

find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf

1

Bu cevabın daha iyi olduğuna inanıyorum:

/unix/12593/how-to-remove-all-the-files-in-a-directory

En üst düzey dizininiz çağrılırsa images, çalıştırın rm -r images/*. Bu, görüntüler içindeki her dosya veya dizinde *çalıştırmak için kabuk glob operatörünü kullanır rm -r.

temelde bir seviye yukarı çıkarsınız ve ardından X dizini içindeki her şeyi sil dersiniz. Bu şekilde, hangi klasörün içeriğinin silinmesi gerektiğini hala belirtiyorsunuz; bu, orijinal klasörü korurken, yalnızca 'buradaki her şeyi sil' demekten daha güvenlidir (bazen izin verilmediği veya istemediğiniz için klasörün mevcut izinlerini değiştirmek için)

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.