Tüm giriş dizininizi sildiniz (neredeyse)!
rm -r something bir şeyin içindeki / altındaki dosyaları ve dizinleri tekrar tekrar siler ; yalnızca farklı bir kullanıcının sahibi olduğu (örneğin root) veya kullanımda olduğu için (örn. bir GVFS bağlantısı) silme iznine sahip olmayan öğelerde başarısız olur .
Eklemediyseniz -f(olduğu gibi rm -rf something), şöyle bir şey alırsınız:
rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?
Bu noktada iptal edebilirsiniz ve muhtemelen yanlış komutu yürüttüğünüzü fark edersiniz.
Bu tür kazaların nasıl önleneceğine dair topluluktan öneriler
Not: Topluluk wiki, lütfen herkes katkıda bulunmaktan çekinmeyin.
Birkaç dosya için, -idosyaları veya dizinleri kaldırma konusunda onay almak için bu seçeneği kullanın:
$ rm -ri something/
rm: remove regular file ‘something/file~’? y
rm: descend into directory ‘something’? y
rm: remove regular file ‘something/file’? y
rm: remove directory ‘something’? y
Geçerli bir ./dizinden kaldırılıyorsa, farklı bir konumu yanlış bir şekilde kaldırmaktan kaçınmak için a ile önekini ekleyin .:
$ cd something
$ rm -v ./*~
removed ‘./file~’
Yukarıdakilerin kullanımını göstermek içindi ./. Bir alt dizin varsa, elbette de kullanabilirsiniz rm -v something/*~. Dikkat : rm ./.*geçerli dizindeki tüm gizli dosyaları kaldırdığını düşünmeyin . Gizli dosyalar globbing ile ilgili geçici çözümler için bu Serverfault sorusuna bakın .
Silmek yerine taşıyın: Dosyaları ilk etapta yinelemeli olarak silmek yerine, sonunda silmeden önce başka bir yerden kurtulmak istediğim dosyaları taşımak için alıştım . Bir şeyler ters giderse geri yüklemesi kolaydır.
mv -b SOURCE DEST
Kullanım find(muhtemelen ile grep) için önizleme özyinelemeli seçilen dosyaları silmek istiyorum. Bunu nadir bir olay haline getirmeye çalışmalısınız, ancak eğer yapmanız gerekiyorsa ...
findargüman olmadan, geçerli dosya altındaki tüm dosyaları / dizinleri özyinelemeli olarak listeler. man findNasıl seçici hale getireceğinizi aramaya çalışmalısınız (bir hazine sandığı), ancak rahatsız grepetmek istemiyorsanız, silmek istediğiniz dosyalar için filtrelemek için tanıdık kullanabilirsiniz .
- Bir uber-l33t çekirdek korsanı olduğumu ve kaynak ağacımdaki birkaç KB "örnek" dosyadan rahatsız olduğumu varsayalım; Adında yer alan tüm dosyaları silmek istiyorum. Bu yüzden
find | grep examplebana bu 20 dosyayı veren yazıyorum . Bu iyi görünüyor, bu yüzden şimdi gidip rm -vdaha önce belirtilen ayrıntılı çıktı ile birlikte bu tam dosyaları silmek xargs:
bul | grep örneği | xargs rm -v
bu da bana bu çıktıyı veriyor . Böyle bir önizleme, samplebunun yerine yazım hatası ve yazım yaptığınız sorunları önler example.
Boşluklar, sekme karakterleri, yeni satırlar veya tırnak işaretleri ( "veya ') içeren dosya adlarınız varsa, yukarıdaki çözüm kullanılmamalıdır , çünkü bu xargsbaşarısızlığa neden olur veya rmeksik dosya adlarıyla beslenir ; Dosyalar. Yukarıdakileri yapmanın güvenli yolu, hepsini findoperatörleri ve eylemleriyle yapmaktır .
Aşağıdaki kelimeyi içeren tüm dosyaları gösterecektir example
find . -name "*example*"
Bu liste kaldırmak istediğiniz -execdosyalarsa, dosyaları aktarmak için eylemi kullanın rm.
find . -name "*example*" -exec rm -v {} +
Kullanımla ilgili daha fazla yardım için Bul özelliğini kullanma konusuna bakın find.