12.05.2009

bash: /bin/cp: Argument list too long

Bugun Cacti sunucu izleme yazilimimizi update ederken bir kopyalama yapmam gerekti. (rra klasoru icerisindeki rrd leri yeni yere kopyalamak seklinde). Ancak daha once almadigim bir hatayla karsilastim.
"bash: /bin/cp: Argument list too long"
Aslinda bu sorun Linux - belki de Unixlerde de, ancak denemedim- cp/mv komutunun calisma biciminden kaynalaniyor.
cp komutu aslinda su sekilde calisiyor.

$ ls a*

a.bz2 a.gz a.tar

$ cp a* /tmp
komutunu verdigimizde isletim sistemi ilk once komut dizinini kendi icerisinde acik acik yaziyor, soyleki:

$ cp a.bz2 a.gz a.tar /tmp seklinde

yani aslinda burdan soyle bir sonuc cikiyor. Diyelim ki:

$ ls a*
a.bz2 a.gz

$ cp a*
komutunu verdigimizde aslinda target destination vermedigimiz icin sistem hata dondurmesi gerekirken dondurmuyor , peki napiyor ???

Komutu acip :

$ cp a.bz2 a.gz

haline getiriyor. Sonra da a.bz2 dosyasini a.gz ismiyle varolan dosyanin uzerine kopyaliyor

Yukarda anlattigim komutun isletim sistemi tarafindan yorumlanmak icin acilarak calistirilmasindan dolayi, rra klasorundeki rrd dosyalarini kopyalarken "bash: /bin/cp: Argument list too long" hatasi aliyoruz.

Bu hatayi asmak icin yapmamiz gereken sey oldukca basit. Dosyalari ya ust klasoru ile ya da daha akillica bir yol ile -find ya da foir ile- teker teker kopyalamaiz gerekecek.

Dolayisiyla:

$ find {rra_klasoru_pathi} -type f -exec cp {target_pathi} {} \; -print komutunu kullanmamiz gerekiyor.