i=0
{ paste res.? res.?? res.???
while paste ./res."$((i+=1))"[0-9][0-9][0-9]
do :; done; } >outfile
Я не думаю, що це так складно, як усе - ви вже зробили важку роботу, замовивши імена файлів. Просто не відкривайте їх усі одночасно, це все.
Інший спосіб:
pst() if shift "$1"
then paste "$@"
fi
set ./res.*
while [ -n "${1024}" ] ||
! paste "$@"
do pst "$(($#-1023))" "$@"
shift 1024
done >outfile
... але я думаю, що це робить їх назад ... Це може працювати краще:
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
І ось ще один спосіб:
tar --no-recursion -c ./ |
{ printf \\0; tr -s \\0; } |
cut -d '' -f-2,13 |
tr '\0\n' '\n\t' >outfile
Це дозволяє tar
зібрати всі файли в поточний відмінений для вас розмір, аналізує всі метадані заголовка, крім назви файлу, та перетворює всі рядки у всіх файлах на вкладки. Хоча він покладається на те, що вхід є фактичними текстовими файлами - це означає, що кожен закінчується в новому рядку, і у файлах немає нульових байтів. Про - і це також залежить від імен файлів , самі будучи новим рядком вільної (хоча це може бути оброблено робастний з GNU tar
«s --xform
варіантом) . Враховуючи ці умови, він повинен зробити дуже коротку роботу з будь-якої кількості файлів - і tar
зробить майже все це.
Результат - це набір ліній, які мають вигляд:
./fname1
C1\tC2\tC3...
./fname2
C1\tC2\t...
І так далі.
Я перевірив це, спершу створивши 5 тестових файлів. Мені зараз не дуже хотілося створювати 10000 файлів, тому я просто побільшав для кожного - а також переконався, що довжина файлів відрізняється значною мірою. Це важливо при тестуванні tar
сценаріїв, оскільки tar
буде блокувати введення фіксованої довжини - якщо ви не спробуєте принаймні кілька різних довжин, ви ніколи не дізнаєтесь, чи будете ви реально обробляти лише один.
У будь-якому випадку для тестових файлів я зробив:
for f in 1 2 3 4 5; do : >./"$f"
seq "${f}000" | tee -a [12345] >>"$f"
done
ls
згодом повідомили:
ls -sh [12345]
68K 1 68K 2 56K 3 44K 4 24K 5
... тоді я побіг ...
tar --no-recursion -c ./ |
{ printf \\0; tr -s \\0; }|
cut -d '' -f-2,13 |
tr '\0\n' '\n\t' | cut -f-25
... просто показати лише перші 25 полів з обмеженими вкладками на рядок (адже кожен файл - це один рядок - їх дуже багато ) ...
Вихід був:
./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
параметром ізpaste
командою?