Bir Dizindeki Bir veya Birkaç Uzantılı Dosya Dışında Tüm Dosyaları Silmenin 3 Yolu
Bazen bir dizindeki tüm dosyaları silmeniz veya belirli bir türdeki (belirli bir uzantıyla biten) dosyalar dışındaki tüm dosyaları kaldırarak dizini temizlemeniz gereken bir durumla karşılaşırsınız.
Bu makalede, rm, find ve globignore komutlarını kullanarak belirli dosya uzantıları veya türleri dışında bir dizindeki dosyaları nasıl sileceğinizi göstereceğiz.
Daha ileri gitmeden önce, Linux'taki önemli bir kavrama, elimizdeki sorunla başa çıkmamızı sağlayacak dosya adı modeli eşleştirmeye kısaca göz atarak başlayalım.
Önerilen Okuma: Linux'ta Birden Çok Dosya Adını/Uzantısını Aramak için Find Komutunu Kullanın
Linux'ta kabuk modeli, joker karakterler veya meta karakterler olarak adlandırılan aşağıdaki özel karakterlerden oluşan bir dizedir:
*
– sıfır veya daha fazla karakterle eşleşir?
– herhangi bir tek karakterle eşleşir[seq]
– sıradaki herhangi bir karakterle eşleşir[!seq]
– sıradaki olmayan herhangi bir karakterle eşleşir
Burada inceleyeceğimiz üç olası yöntem vardır ve bunlar şunları içerir:
Genişletilmiş Desen Eşleştirme Operatörlerini Kullanarak Dosyaları Silme
Farklı genişletilmiş model eşleştirme operatörleri aşağıda listelenmiştir; burada desen-listesi, |
karakteri kullanılarak ayrılmış bir veya daha fazla dosya adı içeren bir listedir:
*(pattern-list)
– belirtilen kalıpların sıfır veya daha fazla tekrarıyla eşleşir?(pattern-list)
– belirtilen kalıpların sıfır veya bir örneğiyle eşleşir- +(örüntü listesi) – belirtilen kalıpların bir veya daha fazla tekrarıyla eşleşir
@(desen listesi)
– belirtilen kalıplardan biriyle eşleşir!(pattern-list)
– verilen kalıplardan biri dışındaki her şeyle eşleşir
Bunları kullanmak için extglob kabuk seçeneğini aşağıdaki şekilde etkinleştirin:
shopt -s extglob
1. Bir dizindeki dosya adı dışındaki tüm dosyaları silmek için aşağıdaki komutu yazın:
rm -v !("filename")
2. dosyaadı1 ve dosyaadı2 dışındaki tüm dosyaları silmek için:
rm -v !("filename1"|"filename2")
3. Aşağıdaki örnek, tüm .zip
dosyaları dışındaki tüm dosyaların etkileşimli olarak nasıl kaldırılacağını gösterir:
rm -i !(*.zip)
4. Daha sonra, bir dizindeki tüm .zip
ve .odt
dosyaları dışındaki tüm dosyaları aşağıdaki gibi silebilirsiniz, aynı zamanda ne olduğunu görüntülerken Tamamlandı:
rm -v !(*.zip|*.odt)
Gerekli tüm komutları aldıktan sonra extglob kabuk seçeneğini şu şekilde kapatın:
shopt -u extglob
Linux find Komutunu Kullanarak Dosyaları Sil
Bu yöntemde, find komutunu özel olarak uygun seçeneklerle veya xargs komutuyla birlikte aşağıdaki formlarda olduğu gibi bir ardışık düzen kullanarak kullanabiliriz:
find /directory/ -type f -not -name 'PATTERN' -delete
find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm {}
find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm [options] {}
5. Aşağıdaki komut geçerli dizindeki .gz
dosyaları dışındaki tüm dosyaları silecektir:
find . -type f -not -name '*.gz'-delete
6. Bir ardışık düzen ve xargs kullanarak yukarıdaki durumu aşağıdaki gibi değiştirebilirsiniz:
find . -type f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}
7. Ek bir örneğe bakalım, aşağıdaki komut .gz
, .odt
ve dışındaki tüm dosyaları silecektir. Geçerli dizindeki .jpg
dosyaları:
find . -type f -not \(-name '*gz' -or -name '*odt' -or -name '*.jpg' \) -delete
Bash GLOBIGNORE Değişkenini Kullanarak Dosyaları Silin
Ancak bu son yaklaşım yalnızca bash ile çalışır. Burada, GLOBIGNORE değişkeni, yol adı genişletmesi tarafından göz ardı edilecek iki nokta üst üste ayrılmış bir model listesi (dosya adları) saklar.
Önerilen Okuma: Linux'ta Grep Komutu ile İlgili Faydalı 12 Pratik Örnek
Bu yöntemi kullanmak için temizlemek istediğiniz dizine gidin ve ardından GLOBIGNORE değişkenini aşağıdaki gibi ayarlayın:
cd test
GLOBIGNORE=*.odt:*.iso:*.txt
Bu durumda, .odt
, .iso
ve .txt
dosyaları dışındaki tüm dosyalar geçerli dizinden kaldırılır.
Şimdi dizini temizlemek için komutu çalıştırın:
rm -v *
Daha sonra GLOBIGNORE değişkenini kapatın:
unset GLOBIGNORE
Not: Yukarıdaki komutlarda kullanılan işaretlerin anlamını anlamak için, çeşitli resimlerde kullandığımız her komutun kılavuz sayfalarına bakın.
Bu kadar! Aynı amaç için aklınızda başka komut satırı teknikleri varsa aşağıdaki geri bildirim bölümümüz aracılığıyla bizimle paylaşmayı unutmayın.