Nasıl bir dizinden tüm dosyaları kaldırmak için?

En yakın olduğum yer

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

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

Linux uzantıları kullanmaz. Adın bir uzantıya sahip olması gerekip gerekmediğine karar vermek dosyanın oluşturucusuna bağlıdır. Linux, ne tür bir dosyayla uğraştığını anlamak için ilk birkaç bayta bakar.

  • Tümünü kaldırmak için gizli olmayan dosyalar* bir dizinde kullanın:

    rm /path/to/directory/*

    Ancak bu, her alt dizin için bir hata gösterecektir, çünkü bu modda yalnızca dosyaların silinmesine izin verilir.

  • Bir dizindeki gizli olmayan tüm dosyaları ve alt dizinleri (tüm içerikleriyle birlikte) kaldırmak için:

    rm -r /path/to/directory/*

* Gizli dosyalar ve dizinler, adları şunlarla başlayan dizinlerdir: . (nokta) karakteri, örn.: .hidden-file veya .hidden-directory/. Bash'ta, eğer dotglob seçenek (varsayılan olarak kapalıdır) ayarlandı, rm dahil olacak çünkü gizli dosyaları da hareket edecektir * dosya adı bağımsız değişkenlerinin listesini sağlamak için kabuk tarafından genişletilir.

  • Bir klasörü tüm içeriğiyle (tüm iç klasörler dahil) kaldırmak için:

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

    rm -rf /path/to/directory/*

    veya gizli dosyaların / dizinlerin de kaldırıldığından emin olmak istiyorsanız:

    rm -rf /path/to/directory/{*,.*}
  • Bir klasörün içindeki tüm "dosyaları" kaldırmak için(değil iç klasörleri kaldırma):

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

Uyarı: yolunuzda boşluk varsa, her zaman tırnak işaretleri kullandığınızdan emin olun.

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

2 ayrı eşdeğerdir rm -rf arıyor:

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

Bu sorunu önlemek için şunları kullanabilirsiniz 'tek tırnaklar'(kabuk değişkenlerinin bile tüm açılımlarını engeller) veya "çift tırnak"(kabuk değişkenlerinin genişlemesine izin verir, ancak diğer genişlemeleri önler):

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

Nerede:

  • rm - anlamına gelmek kaldırmak
  • -f - anlamına gelmek güç bu, örneğin bir arşivi kaldırmak isteyip istemediğiniz sorulmak / sorulmak istemediğinizde yararlıdır.
  • -r - anlamına gelmek yinelemeli bu, her klasöre yinelemeli olarak gitmek ve her şeyi kaldırmak istediğiniz anlamına gelir.

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

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

Tüm dosyaları ve dizinleri silmek için saklı bir dizinde, aşağıdakileri deneyebilirsiniz:

  • klasörü silin ve yeniden oluşturun

    rm -rf dir_name && mkdir dir_name
  • kullanmak find

    find dir_name -mindepth 1 -delete  

Burada belirtiyoruz -mindepth 1 dizin dir_name kendisini dışlamak için.
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

Yalnızca / path / to / dizinindeki dosyaları silmek istiyorsanız şunları yapabilirsiniz

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

veya

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

Yükleri şunlarla yapabilirsiniz find bunun avantajı, bulunanları borulamadan listeleyebilmenizdir. rm böylece başlamadan önce nelerin silineceğini görebilirsiniz.

Tüm alt dizinleri ve dizinin kendisini de kaldırmak isterseniz, şunları kullanabilirsiniz rm -rf /path/to/directory. Ancak return tuşuna basmadan önce hattınızı her zaman iki kez kontrol edin, rm -rf örneğin, süper kullanıcı izinlerine sahipken ilk eğik çizgiden sonra yanlışlıkla bir boşluk eklerseniz, çok fazla havock'a da neden olabilir...

Bunu kendim aradığımda bu soru sürekli olarak Google'ın en üstünde olduğu için:

Diğer cevaplar farklı sorunlardan muzdarip:

  1. Bunlardan bazıları şunlardır . ve .. gürültülü, kafa karıştırıcı ve sinir bozucu.

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

  3. Dizin silinmesine izin vermek için doğru (en derin-ilk) sırayla silmezler.

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

  5. Ek parametrelerle düzgün bir şekilde genişletilmeleri zordur (aşağıda daha fazlası).

Bu nedenle, bir dizindeki tüm dosya ve klasörleri yinelemeli olarak 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 --

Bir tane eklediğimi unutmayın -xdev bağlantılara inmeyi önlemek için argüman (örneğin /proc vb.).

Neden olmasın -depth veya -delete?

İnsanlar beni bunun için sürekli olarak küçümsemelerine rağmen, bu yöntemlerin bir dezavantajı var: izin verecek kadar genişletilebilir gibi görünmüyor -prunebir alt dizin oluşturma (daha fazla sorun getirmeden). Bu yöntemin aksine, şunları ekleyebilirsiniz

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

önce -mindepth hariç tutulacak argüman subdir içeriğinin silinmesinden.

Yapabilirsin cd dizine girin ve komutu çalıştırın rm *.* hatırlarsan dos'taki gibi.

Geçerli dizini silmek için, örneğin şunları kullanabilirsiniz rm -d ./*

-d dizinleri de silmenizi söyler.

Buradaki cevaba bakın, bu, herhangi bir uyarı vermeden ve dizinin kendisini silmeden gizli dosyaları da kaldırabilir ubuntu - Delete contents but not directory in Linux? - Stack Overflow

Gerçek bir cevap eklemek için yeterli itibarım yok, ancak shopt -s dotglob && rm / path / to / directory / * çözümünü bash’ta kullanırken (shopt -s dotglob && rm / path / to/ directory/*) (parantez içinde) ‘shopt -s dotglob’ un bu komutun ötesine sızmasını önleyecektir. (Parantezler içerilen komutları bir alt kabukta çalıştırır.)