Sistem komutları için bağımsız değişken listesinin ne kadar süre olabileceği konusunda maksimum bir sınır vardır - bu sınır, MAX_ARG_PAGES
çekirdeğin ne zaman derlendiğine bağlı olarak distro-spesifiktir ve çekirdeği yeniden derlemeden değiştirilemez.
Globbing'in kabuk tarafından işlenme şekli nedeniyle, aynı argümanı ("* .jpg") kullandığınızda çoğu sistem komutunu etkiler. Glob önce kabuk tarafından işlendiğinden ve sonra komuta gönderildiğinden, komut:
cp -uf *.jpg /targetdir/
aslında yazdığınız gibi kabukla aynıdır:
cp -uf 1.jpg 2.jpg ... n-1.jpg n.jpg /targetdir/
Çok sayıda jpegs ile uğraşıyorsanız, bu çok hızlı bir şekilde yönetilemez hale gelebilir. Adlandırma kuralınıza ve gerçekten işlemeniz gereken dosya sayısına bağlı olarak, cp komutunu aynı anda dizinin farklı bir alt kümesinde çalıştırabilirsiniz :
cp -uf /sourcedir/[a-m]*.jpg /targetdir/
cp -uf /sourcedir/[n-z]*.jpg /targetdir/
Bu işe yarayabilir, ancak tam olarak ne kadar etkili olacağını, dosya listenizi uygun globbable bloklara ne kadar iyi bölebileceğinize bağlıdır.
Globbable. Bu kelimeyi seviyorum.
Gibi bazı komutlar, find ve xargs , acı büyüklüğünde argüman listeleri yapmadan büyük dosya listeleri işleyebilir.
find /sourcedir/ -name '*.jpg' -exec cp -uf {} /targetdir/ \;
-Exec bağımsız değişkeni, find ile bulunan her dosya için {} yerine bulunan her dosya adıyla komut satırının kalanını bir kez çalıştırır . Yana cp komutu yalnızca bir seferde bir dosya üzerinde çalıştırılır, argüman listesi sınırı bir sorun değildir.
Bu, her dosyayı ayrı ayrı işlemek zorunda kaldığından yavaş olabilir. Xargs kullanmak daha verimli bir çözüm sağlayabilir:
find /sourcedir/ -name '*.jpg' -print0 | xargs -0 cp -uf -t /destdir/
Xargs tarafından sağlanan tam dosya listesini alabilir bulmak ve yönetilebilir boyutlarda ve çalıştırma ait argümanı listeleri içine yıkmak cp bu sublists her birinde.
Tabii ki, çekirdeğinizi yeniden derleme ve daha büyük bir değer belirleme olasılığı da var MAX_ARG_PAGES
. Ama bir çekirdeği yeniden derlemek, bu cevapta açıklamak istediğimden daha fazla iş.