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


289

En yakın aldığım

# rm /path/to/directory/*.*

ancak bu, uzantısı olmayan dosyalar için işe yaramaz ...

Yanıtlar:


340

Linux, uzantıları kullanmaz. Adın bir uzantısı olmasını isteyip istemediğine karar vermek, dosyanın yaratıcısına bağlıdır. Linux nasıl bir dosya ile uğraştığını bulmak için 1. bayta bakar.

Bir dizindeki her şeyi kaldırmak için şunu kullanın:

rm /path/to/directory/*

Bu -rseçeneği kullanabilirsiniz, örneğin:

rm -r /path/to/directory/*

ayrıca, içeriğini kaldırmakta olduğunuz dizinin içindeki tüm alt dizinleri (tüm içerikleriyle birlikte) kaldırmak için. Aksi takdirde, dizini kaldırmadığını bildiren bir hata gösterecektir.


13
Ayrıca çalıştırmadan shopt -s dotglobönce çalıştırılan gizli dosyaları da silmek istersenizrm (...)
danjjl

7
* all files,;) *.*.
Adında

10
@Rinzwind, daha doğru bir şekilde yıldız işareti "sıfır veya daha fazla karakter" anlamına gelir. Yani *a*sıfır veya daha fazla karakter, ardından sıfır veya daha fazla karakter anlamına gelir a. Bu dosya maç olacağını happy, apple, aveya la.
DisgruntledGoat

7
@ user784637 çok kolay etkilendiniz
barlop

1
İstediğiniz komut İşte: rm - *
anon58192932

168
  • Klasörü tüm içeriği ile birlikte kaldırmak için ( tüm iç klasörler dahil ):

    rm -rf /path/to/directory
    
  • Klasörün tüm içeriğini kaldırmak için ( tüm iç klasörler dahil ), ancak klasörün kendisini değil:

    rm -rf /path/to/directory/*
    

    veya

    rm -rf /path/to/directory/{*,.*}
    

    Gizli dosyaların / dizinlerin de kaldırıldığından emin olmak istiyorsanız.

  • Bir klasördeki (içeriden tüm "dosyalar" kaldırmak için değil iç klasörleri kaldırarak ):

    rm -f /path/to/directory/{*,.*}
    


  • Uyarı : Yolunuzda boşluklar varsa, daima tırnak kullandığınızdan emin olun.

    rm -rf /path/to the/directory/*
    

    2 ayrı rm -rfçağrıya eşittir :

    rm -rf /path/to
    rm -rf the/directory/*
    

    Bu sorunu önlemek için, 'tekli tırnak '( kabuk değişkenlerini genişletmez ) veya "çift ​​tırnaklı "( kabuk değişkenlerini genişletir ) kullanabilirsiniz:

    rm -rf "/path/to the/directory/"*
    


Nerede:

  • rm- " kaldır " anlamına gelir
  • -f- örneğin bir arşivi kaldırmak isteyip istemediğiniz sorulduğunda yardımcı olacak " kuvvet " anlamına gelir .
  • -r- " özyinelemeli " anlamına gelir; bu, her klasörde özyinelemeli olarak aşağı inip her şeyi kaldırmak istediğiniz anlamına gelir.

8
Bunu, Kabul Edilen olarak işaretlenmiş olan cevabın üstünde ve üstünde daha kapsamlı ve yararlı bir cevap olarak buldum.
inspirednz

2
rm -rf /path/to/directory/*örn .htaccess. klasördeki gizli bir dosyayı kaldırmaz . Belki rm -rf /path/to/directory/.? Denemedim.
Mark Berry,

@MarkBerry rm -rf /path/to/directory/.*
Lilian A. Moraru

@ LilianA.Moraru, bugün bazı testler yaptım. rm -rf /path/to/directory/.*sadece belirtilen dizindeki gizli dosyaları siler. Gizli dosyaları silmek için çalıştırmadan shopt -s dotglobönce @ danjjl'in @ Rinzwind'in cevabı hakkındaki yorumuna bakın rm -rf /path/to/directory/*.
Mark Berry,

DİKKAT: rm -rf /path/to/directory/.*sistemimde öğelerin silinmesine neden oldu /path/to. Neyse ki, verilerimin tamamını ayrı bir diske yedekledim. Söylemeye gerek yok rm -rf /path/to/directory/.*, tüm bilgisayarınızı ayrı / güvenli bir yere yedeklemediğiniz sürece komutu vermeyin!
kanun listesi

43

Dizindeki tüm dosyaları kaldırmak için (gizli dosyalar ve alt dizinler dahil) çalıştırın:

rm -rf /path/to/directory/{*,.*}

1
Bu kabul edilen güzel cevap olmalı. Teşekkür ederim!
Nam G VU

3
Bu dünya "" ile eşleşmiyor mu? ve de?
hertzsprung

4
@hertzsprung - yapar ve size silemeyeceği konusunda bir uyarı verir ./ve ../yine de gizli dosyaları siler.
Ryan Wheale,

Bu Mac konsolunda çalışmıyor, gizli dosyalar hala bu komut satırında.
agapitocandemor 21:18

Geçerli dizindeki her şeyi kaldırmak için:rm -r $(pwd)/{*,.*}
Jimmy Adaro

10

Yalnızca / path / to / dizinindeki dosyaları silmek isterseniz,

find /path/to/directory -type f -print0| xargs -0 rm 

veya

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

Yüklemeyle yapabilirsiniz find, avantajı, borulamadan bulunanları listeleyebilmenizdir, rmböylece başlamadan önce silinecekleri görebilirsiniz.


2
GNU findbir -deleteöngörü olarak. Hala kullanmak isterseniz -exec, ikame \;ile +bir araya gelecek rmverimliliğin artırılması, birlikte aramaları.
enzotib 6:11

1
'+' işaretli dosyaların büyük bir kısmı sorunlara neden olur çünkü liste rm -f * ile aynı büyüklükte olacaktır. ve aynı klasörden büyük miktarda dosya kaldırırken (milonca konuşulurken) ikisi de iyi değil :) Sonunda C ++ geldi ve dosyaları dir-tree'deki inode sırasına göre aldı.
Osis

3
Gerçekten de eklemelisin - rm'den sonra. Bu olmadan bir dosya isminiz varsa -rf ya da benzerleri rm argümanları olarak yorumlanır. örneğin, xargs -0 rm - veya -exec rm - {} \;
Richm

xargs'a -n argümanını da sağlayabilirsiniz. Bu, rm komutlarını maksimum sayıda argümana sahip olmasına neden olacak, yani 'xargs -n 100 -0 rm -', 100'lük parçalar halinde dosyaları kaldıracaktır.
Richm

1
Ayrıca, bulmanın herhangi bir alt dizinden dosya döndürmemesini sağlamak için -maxdepth 1 öğesini de ekleyebilirsiniz. yani / path / to / dizinini -maxdepth 1
-tip f'yi bulun

7

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

  • klasörü silin, sonra yeniden oluşturun

    rm -rf dir_name && mkdir dir_name
    
  • kullanım find

    find dir_name -mindepth 1 -delete  
    

Burada -mindepth 1dir_name dizininin kendisini dışlamayı belirledik.
Aşağıdaki bağlantıya bir göz atın:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory


Tavsiyeniz için teşekkürler ve bağlantılar için daha fazla açıklama ekledim.
zeekvfu

3
Dikkatli olun, çünkü klasörü silmek ve yeniden oluşturmak, bu klasör için farklı / yanlış izinlere neden olabilir!
einjohn

6

Ayrıca tüm alt dizinleri ve dizinin kendisini de silmek istiyorsanız, kullanabilirsiniz rm -rf /path/to/directory. Ancak, geri dönüşe basmadan önce hattınızı her zaman iki kez kontrol edin, rm -rfaynı zamanda çok fazla hataya da neden olabilir, örneğin, süper kullanıcı izinlerine sahipken ilk eğik çizgiden sonra yanlışlıkla bir boşluk yerleştirirseniz ...


1

Bu soruyu kendim aradığımda bu soru sürekli Google’ın tepesinde olduğundan:

Diğer cevaplar farklı sorunlardan muzdarip:

  1. Bunlardan bazıları şunlardır .ve ..gürültülü kafa karıştırıcı ve can sıkıcı olan.

  2. Bazıları gizli dosyaları unutur (nokta ile başlayan dosyalar).

  3. Dizinin silinmesine izin vermek için doğru (en derin ilk) sırada silmezler.

  4. Genellikle istenmeyen diğer (monte edilmiş) dosya sistemlerine inerler.

  5. Ekstra parametrelerle düzgün şekilde genişletmek zordur (aşağıda daha fazlası).

Dolayısıyla, bir dizindeki tüm dosyaları VE klasörleri GERİ KAZANIMI silmek için şunu yapın:

find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --

Unutmayın, -xdevbağlara ( /procvb. Gibi) düşmesini önlemek için bir argüman eklediğimi unutmayın .

Neden -depthya -delete?

İnsanlar bunun için beni sürekli oyluyor olsa da, bu yöntemlerin bir dezavantajı var: -prunebir alt dizine izin verecek kadar genişletilebilir görünmüyor (daha fazla sorun ortaya koymadan). Bu yönteme zıt olarak,

-not \( -path "${DIR}/subdir" -prune \)

-mindepthargümanından önce subdiriçeriğinin silinmesini engellemek için.


Derinlik ilk sipariş için, bunun için bir -depthbayrak findvar.
Sergiy Kolodyazhnyy,

Aa ... neden sadece kullanmak -deleteilefind ? -deletederinlik ilk. Zaten findile POSIX olmadığını varsayıyorsunuz -printf, bu yüzden de kullanabilirsiniz -deleteya da-depth -print0 | xargs -0 rm
muru

@muru: Çünkü daha iyisini bilmiyordum ... Değiştireceğim.
Mehrdad

@muru: Aslında, yönteminiz işe yaramadı gibi görünüyor -not \( -path "$DIR/subdir" \)... ama benimki çalışıyor mu? Neden?
Mehrdad

@Mehrdad ne yapmalı?
muru

0

cdDizine girebilir ve sonra rm *.*hatırlarsanız DOS'ta olduğu gibi komutu çalıştırabilirsiniz .


1
DOS, dosyalar için DEL ve boş dizinler için RMDIR'dir ve gizli ve sistem dosyalarında önce bu ATTRIB özniteliklerinin kaldırılması gerekir. Neredeyse basit değil;)
Eric

0

Geçerli dizini silmek için örneğin rm -d ./*

-d dizinleri de silmeyi söyler.

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.