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.
find /yol -maxdepth 1 -type f -name "*.log" | wc -lfind /yol -maxdepth 1 -type f -name "*.log" -deletefind ... -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
*.log, sess_* gibi) netleştirin.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.
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.
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.
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.
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.
-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.
-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.
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.

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.
-exec rm {} \; çok yavaş. Noktalı virgül sonu her dosya için ayrı bir rm başlatır; + ya da -delete kullanın.find ... -mtime +7 -delete satırı ekleyin.www-data) aittir; komutu sudo ile çalıştırın.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.
Sonraki adımlar
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.
İç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.
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ü?
Geri bildiriminiz için teşekkürler.
Çö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.