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
लिए सभी फ़ाइलों को अशक्त-सीमांकित स्ट्रीम में इकट्ठा करने की अनुमति देता है, इसके हेडर मेटाडेटा लेकिन फ़ाइल नाम के सभी को पार्स करता है, और सभी फ़ाइलों को टैब में सभी लाइनों को बदल देता है। हालांकि यह वास्तविक टेक्स्ट-फाइल्स के इनपुट पर निर्भर करता है - जिसका अर्थ है कि प्रत्येक छोर w / एक नई रेखा है और फाइलों में कोई नल-बाइट्स नहीं हैं। ओह - और यह भी खुद को न्यूलाइन-फ्री होने के फिल्नाम पर निर्भर करता है (हालांकि यह GNU tar
के --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
?