Argument List Too Long Hatası Nasıl Çözülür (rm, cp, mv)

Son gözden geçirme: Eylül 2026 · Ubuntu 24.04 resmî dokümanına göre

Hızlı çözüm

bash: /usr/bin/rm: Argument list too long — argument list too long hatası, * joker karakteri binlerce dosya adına açıldığında komut satırının çekirdek sınırını (ARG_MAX) aşmasıdır. Çözüm dosyaları tek komuta yığmak yerine find ile işlemektir.

  1. Önce listeleyin ve sayın: find /yol -maxdepth 1 -type f -name "*.log" | wc -l
  2. Silmek için: find /yol -maxdepth 1 -type f -name "*.log" -delete
  3. Taşımak ya da kopyalamak için: find ... -exec mv -t /hedef/ {} + (kopyada cp -t).
Panel Yok — VPS/VDS yönetimsizdir; işlem sunucunuzda SSH ile yapılır
Sistem Ubuntu 22.04/24.04, Debian 12, AlmaLinux 8/9, Rocky 9 (GNU findutils)
Yetki Dosyaların sahibi olan kullanıcı; sistem dizinlerinde sudo
Narhost ürünü VPS Sunucu, VDS Sunucu

Başlamadan önce

  • Sunucunuza SSH ile bağlı olun; paylaşımlı hostingde SSH yoktur, bu kart VPS/VDS içindir.
  • İşlem yapacağınız dizinin tam yolunu ve dosya adı desenini (*.log, sess_* gibi) netleştirin.
  • Silme işlemi geri alınamaz; gerekli dosyalar varsa önce yedek alın.

Argument List Too Long Hatası Neden Olur

Kabuk, rm *.log yazdığınızda deseni komutu çalıştırmadan önce eşleşen tüm dosya adlarına açar ve bu listeyi tek parça olarak rm programına gönderir. Linux çekirdeği bir programa aktarılan argüman ve ortam değişkenlerinin toplam boyutunu sınırlar; sınır aşılınca execve çağrısı E2BIG döner ve kabuk bunu hata olarak yazar. Sınırın ayrıntısı execve man sayfasında anlatılır.

Sorun rm‘e özgü değildir; cp, mv, ls, chmod ve tar aynı hatayı verir. Genellikle yüz binlerce PHP oturum dosyası, önbellek parçası, e-posta kuyruğu ya da günlük dosyasıyla dolan bir dizinde görülür. Dosya sayısı dizinin boyutundan bağımsız sorun çıkarır; küçük ama çok sayıda dosya disk yerine inode tüketir.

Adım Adım Çözüm

1. Sınırı ve dosya sayısını görün

  1. Çekirdeğin argüman sınırını okuyun:
    getconf ARG_MAX

    Beklenen sonuç: bayt cinsinden bir sayı, çoğu Ubuntu kurulumunda 2097152 (yığın sınırının dörtte biri). Sayı sınırı değil, toplam bayt sınırıdır.

  2. Dizindeki eşleşen dosyaları sayın:
    find /var/www/ornek.com/tmp -maxdepth 1 -type f -name "*.log" | wc -l

    Beklenen sonuç: tek bir sayı. find dosya adlarını kendisi okuduğu için bu komut hataya düşmez.

2. Önce listeleyin, sonra silin

Dikkat

Silinen dosya geri gelmez. -delete yazmadan önce aynı komutu -print ile çalıştırıp listeyi gözden geçirin; -delete her zaman komutun en sonunda durmalıdır, başa yazılırsa desen uygulanmadan her şeyi siler.

  1. Silinecekleri ekrana dökün:
    find /var/www/ornek.com/tmp -maxdepth 1 -type f -name "*.log" -print | head -20

    Beklenen sonuç: yalnız silmek istediğiniz desene uyan ilk 20 dosya.

  2. Aynı komutu -delete ile çalıştırın:
    find /var/www/ornek.com/tmp -maxdepth 1 -type f -name "*.log" -delete

    Beklenen sonuç: çıktı yok, komut istem satırına döner. Yalnız belirli yaştaki dosyalar için -mtime +7 ekleyebilirsiniz.

3. Taşıma ve kopyalama

  1. -exec ... {} + biçimini kullanın.+ sonu, find‘ın dosya adlarını sınırı aşmayacak gruplara bölüp komutu gerektiği kadar çalıştırmasını sağlar:
    find /var/www/ornek.com/tmp -maxdepth 1 -type f -name "*.jpg" -exec mv -t /yedek/resimler/ {} +
    find /var/www/ornek.com/tmp -maxdepth 1 -type f -name "*.jpg" -exec cp -t /yedek/resimler/ {} +

    Beklenen sonuç: dosyalar hedef dizine geçer; -t hedefi başa aldığı için dosya listesi sona eklenebilir.

  2. Alternatif olarak xargs: boşluk ve özel karakter içeren adlar için -print0 ile -0 birlikte kullanılır.
    find /var/www/ornek.com/tmp -maxdepth 1 -type f -name "sess_*" -print0 | xargs -0 rm --

    Beklenen sonuç: xargs listeyi parçalara bölüp rm‘i birden çok kez çalıştırır; ayrıntılar xargs man sayfasında.

Argument list too long hatası çözüm akışı — sınırı görme, dosyaları sayma, listeleyip silme ve find -exec ile taşıma adımları
Joker karakter yerine find: önce say, sonra listele, en son sil ya da taşı.

Doğrulama

Sonuç

Sayım komutunu tekrar çalıştırın: find /var/www/ornek.com/tmp -maxdepth 1 -type f -name "*.log" | wc -l çıktısı 0 ise silme tamamlanmıştır. Taşımada hedef dizindeki sayı kaynaktaki eski sayıya eşit olmalıdır. df -i ile inode kullanımının düştüğünü de görebilirsiniz.

Hâlâ Çözülmediyse

Narhost desteği

Talebe şunları ekleyin: sunucunuzun IP adresi, hatanın birebir metni, çalıştırdığınız komut ve dizin yolu. Sunucu içi yazılım sizin yönetiminizdedir; altyapı kaynaklı bir sorun görürsek birlikte bakarız.

Destek talebi aç

Sıkça sorulan sorular

ARG_MAX değerini yükseltmek çözüm olur mu?

Kalıcı çözüm değildir. Sınır yığın boyutuna bağlıdır ve dosya sayısı artmaya devam ederse hata geri döner. find ve xargs dosya sayısından bağımsız çalışır.

Dizini tamamen silmek istesem ne yapmalıyım?

İçeriği ve dizini birlikte kaldırmak için rm -r /yol/dizin argüman listesi oluşturmaz, bu hatayı vermez. Yolu iki kez kontrol edin; yanlış dizinde çalıştırılan bu komutun geri dönüşü yoktur.

Argument list too long hatası ls komutunda da çıkar mı?

Evet, ls *.log gibi joker içeren her komutta çıkabilir. Yalnız saymak için ls | wc -l ya da find kullanın; bunlar deseni kabuğa açtırmaz.

Bu makale sorununuzu çözdü mü?

Çözemediniz mi?

Teknik ekibimiz sunucu tarafındaki ayarları sizin için kontrol edebilir. Destek talebinizde alan adınızı ve aldığınız hata metnini paylaşmanız süreci hızlandırır.

İlgili çözümler