i=0
{ paste res.? res.?? res.???
while paste ./res."$((i+=1))"[0-9][0-9][0-9]
do :; done; } >outfile
Bunun kadar karmaşık olduğunu düşünmüyorum - dosya adlarını sipariş ederek çok çalıştınız. Sadece hepsini aynı anda açmayın, hepsi bu.
Diğer yol:
pst() if shift "$1"
then paste "$@"
fi
set ./res.*
while [ -n "${1024}" ] ||
! paste "$@"
do pst "$(($#-1023))" "$@"
shift 1024
done >outfile
... ama bence bu onları geriye doğru yapıyor ... Bu daha iyi olabilir:
i=0; echo 'while paste \'
until [ "$((i+=1))" -gt 1023 ] &&
printf '%s\n' '"${1024}"' \
do\ shift\ 1024 done
do echo '"${'"$i"'-/dev/null}" \'
done | sh -s -- ./res.* >outfile
Ve işte yine başka bir yol:
tar --no-recursion -c ./ |
{ printf \\0; tr -s \\0; } |
cut -d '' -f-2,13 |
tr '\0\n' '\n\t' >outfile
Bu, tar
tüm dosyaları sizin için boş olarak ayrılmış bir akışta toplamanızı sağlar , dosya adı hariç tüm üstbilgi meta verilerini ayrıştırır ve tüm dosyalardaki tüm satırları sekmelere dönüştürür. Girişin gerçek metin dosyaları olmasına dayanır - yani her biri yeni satırla biter ve dosyalarda boş bayt yoktur. Oh - ve aynı zamanda kendilerini yeni satır-özgür olmak dosya adları dayanır (yani GNU ile sağlam ele olabilir gerçi tar
'ın --xform
seçeneği) . Bu koşulların karşılandığı göz önüne alındığında, herhangi bir sayıda dosya üzerinde çok kısa bir çalışma yapmalıdır - vetar
yapmalı neredeyse hepsini yapacaktır.
Sonuç, şuna benzeyen bir dizi satırdır:
./fname1
C1\tC2\tC3...
./fname2
C1\tC2\t...
Ve bunun gibi.
İlk olarak 5 test dosyası oluşturarak test ettim. Şu anda 10000 dosyaya genning gibi hissetmedim, bu yüzden her biri için biraz daha büyüdüm - ve dosya uzunluklarının büyük ölçüde farklı olmasını sağladım . tar
Komut dosyalarını test ederken bu önemlidir, çünkü tar
sabit uzunluklarda girişi engelleyecektir - en az birkaç farklı uzunluk denemediğinizde, yalnızca gerçek olanı ele alıp almayacağınızı asla bilemezsiniz.
Her neyse, yaptığım test dosyaları için:
for f in 1 2 3 4 5; do : >./"$f"
seq "${f}000" | tee -a [12345] >>"$f"
done
ls
daha sonra rapor edildi:
ls -sh [12345]
68K 1 68K 2 56K 3 44K 4 24K 5
... sonra koştum ...
tar --no-recursion -c ./ |
{ printf \\0; tr -s \\0; }|
cut -d '' -f-2,13 |
tr '\0\n' '\n\t' | cut -f-25
... sadece satır başına yalnızca 25 sekmeyle ayrılmış alanı göstermek için (her dosya tek bir satır olduğu için çok fazla var ) ...
Çıktı şuydu:
./1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
./2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
./3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
./4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
./5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
--serial
seçeneğipaste
komutla kullanmayı denediniz mi?