ऑनलाइनर के साथ मदद करें - यादृच्छिक फाइलें बनाएं, दो-चार फ़ाइल नाम का नाम बदलें, यादृच्छिक तारों के साथ भरें [बंद]


1

क्या कोई इतना दयालु होगा और मुझे इस बात का संकेत देगा कि इससे एक-लाइनर कैसे बनाया जाए? या शायद sed / awk / xargs का उपयोग करें? या पर्ल? या बस इसे सरल बनाएं

मैंने स्टैकएक्सचेंज की खोज करके और कुछ स्क्रिप्ट्स को संपादित करके इसे हासिल किया है, लेकिन मैं यह देखना चाहता हूं कि इसे प्रो की तरह कैसे बनाया जाए।

मैं इसमें रैंडम टेक्स्ट वाली फाइलें बना रहा हूं। मुझे नहीं पता कि कितनी फाइलें बनाई जाएंगी, कृपया समझाएं:

< /dev/urandom tr -dc "\t\n [:alnum:]" | dd of=./filemaster bs=100000000 count=1 && split -b 50 -a 10 ./filemaster && rm ./filemaster

मैं उन फ़ाइलनामों को fnames1.txt फ़ाइल में सूचीबद्ध कर रहा हूँ:

ls >> fnames1.txt

मैं फ़ाइल नाम जनरेट कर रहा हूं जो मैं किसी अन्य फ़ाइल में चाहता हूं - fnames2.txt

list=echo {a..z} ; for c1 in $list ; do for c2 in $list ; do echo $c1$c2.ext; done; done >> fnames2.txt

मैं उन फ़ाइलों को दो कॉलम के साथ एक फ़ाइल में मर्ज करता हूं:

paste fnames1.txt fnames2.txt | column -s $'\t' -t >> fn.txt

मैं कॉलम के साथ फ़ाइल के अनुसार फ़ाइल नाम बदल रहा हूं (त्रुटियों के कारण उत्पन्न फाइल से अधिक फाइलें हैं, वास्तव में फ़ाइल नाम की इस राशि को कैसे बदला जाए? - मुझे पता है कि मैं 2> / देव / अशक्त के साथ त्रुटियों को अनदेखा कर सकता हूं):

while read -r line; do mv $line; done < fn.txt

मैं फाइल को एक्सटेंशन के साथ ले जा रहा हूँ, मुझे एक और dir चाहिए:

mkdir files && mv ./*.ext ./files/ && cd files

मुझे उन फ़ाइलों को फिर से लिखना होगा क्योंकि सामग्री को बड़ा करने की आवश्यकता है:

for file in *; do < /dev/urandom tr -dc "\t\n [:alnum:]" | head -c1500 > "$file"; done

क्या कोई मुझे बेहतर तरीके से बता सकता है, या इससे एक-लाइनर बना सकता है? मैं वास्तव में इसकी सराहना करता हूं, क्योंकि मैं सीख रहा हूं कि वन-लाइनर्स कैसे करें।


आप एक-लाइनर बना सकते हैं cmd1और cmd2  कहकर cmd1 && cmd2
जी-मैन

1
आपकी आज्ञा list=echo {a..z}कई प्रकार से टूटी है।
वाइल्डकार्ड

2
हालांकि, बड़े प्रश्न को हल करने के लिए, यह जानने में मदद मिलेगी कि आप वास्तव में क्या करने की कोशिश कर रहे हैं। आप यादृच्छिक फ़ाइलों के साथ क्या करना चाहते हैं जो आप /dev/urandomसीधे नहीं कर सकते हैं? (और आप दिलचस्प होने के लिए एक प्रोग्रामर का इवोल्यूशन पा सकते हैं ।);
वाइल्डकार्ड

@Wildcard आप कृपया समझा सकते हैं कि यह क्यों टूट गया है? हालांकि यह काम करता है। : p मैं फ़ाइलों को जेनरेट करने की कोशिश कर रहा था, जिसका नाम aa.xyz रखा जाएगा ... zz.xyz के साथ रैंडम स्ट्रिंग्स ~ 1000-1500 बाइट्स प्रत्येक।
लूकी

नहीं, वह कमांड काम नहीं करता है। यह आदेश चला करने का प्रयास करेंगे a(से 25 तर्क के साथ bकरने के लिए z) और वातावरण चर के साथ listमूल्य के साथ परिभाषित echo। अपेक्षित परिणाम होगा -bash: a: command not found
वाइल्डकार्ड 16

जवाबों:


0

मेरी राय में, ऑन्लाइनर यहां उपयुक्त नहीं है। यह बड़ा और पठनीय होगा, सुविधाजनक नहीं। पटकथा बेहतर है। इसे फंक्शन में बदला जा सकता है।

यह स्क्रिप्ट "फ़ाइलें" निर्देशिका बनाती है और सभी बनाई गई फ़ाइलों को वहां रखती है। प्रत्येक फ़ाइल का आकार समान है, लेकिन यदि आवश्यक हो, तो इसे बदला जा सकता है। फ़ाइलें तरह नामित: aa.ext ab.ext ac.ext, आदि

उपयोग: ./create_random_files.sh

#!/bin/bash

# Number of files
file_nums=5
# The size of the each file in bytes
file_size=1500

# Creates the "files" directory if it doesn't exist
mkdir -p files

for i in {a..z}{a..z}; do
    # gets data from the /dev/urandom file and remove all unneeded characters
    # from it - all characters except "\t\n [:alnum:]".
    tr -dc "\t\n [:alnum:]" < /dev/urandom |
    # The "head" command takes specified amount of bytes and writes them to the 
    # needed file. 
    # The "files/${i}.ext" is the relative path to new files, which named 
    # like "aa.ext" and placed into the "files" directory
    head -c "$file_size" > "files/${i}.ext"

    # Iterations counter. It will stop "for" loop, when file_nums
    # will be equal to zero
    if !(( --file_nums )); then 
        break
    fi  
done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.