Bir dizindeki tüm dosyalar nasıl kaldırılır?


76

Bir dizindeki tüm dosyaları ve alt dizinleri kaldırmaya çalışıyorum. Ben kullanılan rm -rtüm dosyaları kaldırmak için, ama tüm dosyaları kaldırmak istiyor ve üst dizin kendisi hariç, alt dizinleri.

Mesela benim gibi bir üst dizim var images. Bu dosyaları içeren header.png, footer.pngve bir alt dizin.

Şimdi Silmek istediğiniz header.png, footer.pngve alt dizin değil images.

Bunu Linux'ta nasıl yapabilirim?


1
cd dizinine girin ve rm -Rfiçindeki tüm dosya ve dizinlerden birini yapın.
Noufal Ibrahim

Yanıtlar:


59

Üst düzey dizininiz imagesdenirse çalıştırın rm -r images/*. Bu , içerisindeki her dosya veya dizinde *çalıştırmak için shell glob operatörünü kullanır .rm -rimages


30
gizli dosya silinmeyecek.
Reto

50

Gizli dosyaları silmek için şunları belirtmeniz gerekir:

rm -r images/* images/.*

Globs içeren kabukları .ve ..bu gibi bir hataya yol açacaktır

rm: cannot remove `.' directory `images/.'
rm: cannot remove `..' directory `images/..'

ancak gizli dosyaları silecektir.

Hata mesajı olmayan bir yaklaşım, mindepth ile bul / sil kullanmaktır. Bu gnu-keşif.

find images -mindepth 1 -delete

Bulgunuzda eksiklik olabilir -mindepthveya -deletebu durumu tahmin edebilirsiniz, bu durumda yapabilecekleriniz:

find images/. ! -name . -prune -exec rm -rf {} +

Önerim, 'images / ..' ile eşleşen 'rm -r images /.*' kullanmak, ancak 'images /../ ..' değil. Özyineleme yukarı çıkamaz çünkü 'images /../ images / ..' yine aynı dizindir.
kullanıcı bilinmeyen

4
@DarkHeart rm .*silmez .veya ..ve sahip değil UNIX için geç 70'lerden beri en az GNU Araçlarının için 1994 ve muhtemel beri . rm .*Dosya sistemini bir müze dışında yukarıya doğru geçen bir sistem bulmanız son derece düşük bir ihtimaldir .
terdon

21

Bir dizindeki tüm dosyaları ve dizinleri ( gizli olanlar dahil ) silmek için aşağıdakileri deneyebilirsiniz:

  • ls -Abtüm dosyaları / dizinleri eşleştirmek için kullanın

    cd dir_name && rm -rf `ls -Ab`
    
  • findtüm dosyaları / dizinleri eşleştirmek için kullanın

    find dir_name -mindepth 1 -delete
    

    veya, eğer finddesteklemiyorsa -delete:

    find dir_name -mindepth 1 -exec rm -rf {}
    
  • klasörü silin, sonra yeniden oluşturun

    rm -rf dir_name && mkdir dir_name
    
  • kısaca

    shopt -s dotglob  
    rm -rf dir_name/*
    

rm -rf *Bir dizindeki dosyalar hakkında hiçbir bilginiz yoksa, bu komutun güvenli olmadığını unutmayın, çünkü -(tire) ile başlayan bir dosya rmbayrak olarak yorumlanacaktır ...
VasyaNovikov

1
EDIT: güvenli yapmak için, kullanınrm -rf ./* ./.*
VasyaNovikov

9

Bütün silmek için düzenli bir dizinin içine yinelemeli dosyaları (GNU veya FreeBSD varsayarak bu komut find) yeterince iyi:

find . -type f -delete

Bu, sembolik bağlantılar gibi düzenli olmayan tüm dosyaları (normal dosyalara işaret edip etmeyeceklerini işaret eder), dizinleri, beşleri, yuvaları, aygıtları bırakır ...

Ayrıca bakınız:

find . ! -type d -delete

dizin dışındaki herhangi bir türdeki dosyaları silmek için .


6

Bu sürümü dene:

 rm -r test/*

1
Bu gizli dosyaları kaldırmaz ("." İle başlayanlar).
gbmhunter

3

findBurada komutu kullanıyorum :

1. Adım: Tüm dosyaları bulun ve silin:

find /path/to/directory/ -type f -exec rm {} \;

Örnek:

find /home/user/Desktop/images/ -type f -exec rm {} \;

Adım 2: Tüm alt dizinleri bulun ve silin:

find /path/to/directory/ -type d -exec rm -R {} \;

find /path/to/directory/ -type diçerir ., dizinin kendisini siler. -mindepthAnahtarı, diğerlerinin dediği gibi kullanmanız gerekir .
Arthur Tacca

3

Asıl soru, bir dizini boşaltmaktı = gizli dosyalar dahil bir dizinin içeriğini kaldırmak, dizinin kendisini değil. -Mindepth 1 ile find komutu aslında doğru yoldur, ancak hata iletilerinden kaçınmak için -maxdepth 1 ile birleştirilmesi gerekir:

find /path/to/dir -mindepth 1 -maxdepth 1 -exec rm -rf '{}' \;

0

rm'nin sözdizimi:

rm [OPTION]... FILE...

Bu nedenle, uygun yolu açıkça belirtmeniz gerekir, örneğin;

rm -r sub_dir/

0

Aşağıdaki komutu kullanarak dizini kaldırabilirsiniz:

sudo rm -r directoryname1/2/3/*

3 / * 'dan sonra tüm dizini silecektir.

Örnek sudo rm -r İndirilenler / şarkı / *

İçindeki tüm dosyaları silecektir Downloads/song.


0

Bu benim için mükemmel çalışır, her seferinde işe yarayan çeşitli varyasyonları test eder.

Görüntüler dizinini tutan dizinden.

rm -frd ./images/*

önce:

images/
    |_ header.png
    |_ footer.png
    |_ subdir/

sonra:

images/

Asıl soruda açıkça ifade edildiğinden emin değiliz, ancak sadece dotglob'u etkinleştirmezseniz, bu görüntülerin altındaki herhangi bir "dot-file" veya dot-dizini atlayacağına işaret etmek ( mkdir images/.somedir; touch images/.somefile)
Jeff Schaller

0

Geçerli dizindeki tüm dosyalar ve alt dizinleri, gizli olanlar da dahil olmak üzere, hata mesajı olmadan silmek için :

rm -rf .[^.] .??* *

Veya, ana dizinden:

rm -rf images/.[^.] images/.??* images/*

Gönderen https://serverfault.com/a/47940/269538 .



-2

"Test" klasörünü ve içindeki tüm dosyaları silin:

 rm -r test

İçindeki tüm dosyaları silin, ancak "test" klasörünü saklayın:

 rm -r test/*

-4

Klasör içine cd sonra aşağıdaki komutu yürütün:

ls |xargs rm -rf

2
Bu, boşluk içeren dosya adlarında başarısız olur. Ls çıkışını diğer komutlara girdi olarak kullanmamaya karşı tavsiye ederim, genellikle güvensizdir.
dhag
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.