मैं कमांड लाइन से एक विशिष्ट आकार के साथ एक फ़ाइल कैसे बना सकता हूं?


125

मैं एक फ़ाइल कैसे बना सकता हूं (जैसे touchकमांड या इसी तरह का उपयोग करके ), लेकिन एक विशिष्ट आकार (जैसे 14 एमबी) के साथ?

उपयोग का मामला विभिन्न फ़ाइल आकारों के साथ एफ़टीपी का परीक्षण करना है। यदि हम एक विशिष्ट आकार के साथ एक फ़ाइल बना सकते हैं, तो एफ़टीपी हस्तांतरण आदि को सत्यापित करना उपयोगी होगा।


जवाबों:


158

उपयोग करें truncate:

truncate -s 14M filename

से man truncate:

DESCRIPTION
   Shrink or extend the size of each FILE to the specified size

[...]

 -s, --size=SIZE
          set or adjust the file size by SIZE

नोट: truncateआपके सिस्टम पर उपलब्ध नहीं हो सकता है, उदाहरण के लिए मैक ओएस एक्स पर यह डिफ़ॉल्ट रूप से स्थापित नहीं है (लेकिन उदाहरण के लिए मैकपोर्ट का उपयोग करके आप इसे आसानी से स्थापित कर सकते हैं)। इन मामलों में आपको ddया headइसके बजाय उपयोग करने की आवश्यकता हो सकती है ।


2
वाह। बहुत अच्छा, मुझे यह नहीं पता था।
n611x007

आदमी यह सब कहते हैं: काटना - हटना या निर्दिष्ट आकार के लिए एक फ़ाइल के आकार का विस्तार
ssedano

12
वाकई बहूत बढिया। touchजरूरत है, हालांकि, तो आप बस चला सकते हैं नहीं है truncate -s 14M filenameयह पैदा करेगा filenameसीधे।
टेराडॉन

शांत ... यह वही है जो मैंने ठीक से देखा था ... धन्यवाद @
जैतून

34
यह एक विरल फ़ाइल बनाने के लिए लगता है , जबकि नीचे उत्तर ("dd" का उपयोग करता है) नहीं करता है। मुझे नहीं पता कि क्या अंतर आपके लिए महत्वपूर्ण है, लेकिन मुझे लगा कि मैं इसे
बताऊंगा

100

EDIT: सबसे सरल तरीका शायद truncateआशुतोष विश्व बंधु के जवाब का है , लेकिन जैसा कि @ offby1 ने बताया है कि विरल फाइलें बनती हैं , जो शायद आप नहीं चाहते। नीचे दिए गए समाधान सामान्य, पूर्ण फ़ाइलें बनाते हैं।


निम्नलिखित कमांड एक 14MB फ़ाइल बनाते हैं जिसे कहा जाता है foo:

  1. fallocate( @Breakthrough के लिए धन्यवाद जिन्होंने इसे टिप्पणियों में सुझाया और नीचे अहमद मसूद के जवाब को वोट दिया जिसमें इसका भी उल्लेख है)।

    fallocate -l 14000000 foo
    

    यह कमांड विशेष रूप से प्रभावशाली है क्योंकि यह truncateवांछित फ़ाइल आकार (भले ही बड़ी फ़ाइलों के लिए धीमा होगा) के विपरीत (तात्कालिक) के रूप में तेजी से है और अभी तक सामान्य फाइलें बनाता है, न कि विरल:

    $ truncate -s 14MB foo1.txt 
    $ fallocate -l 14000000 foo2.txt 
    $ ls -ls foo?.txt 
        0 -rw-r--r-- 1 terdon terdon 14000000 Jun 21 03:54 foo1.txt
    13672 -rw-r--r-- 1 terdon terdon 14000000 Jun 21 03:55 foo2.txt
    
  2. रैंडम डेटा से भरी फाइल बनाएं

    dd if=/dev/urandom of=foo bs=14MB count=1
    

                                                                              या

    head -c 14MB /dev/urandom > foo
    
  3. \0S से भरी फाइल बनाएँ :

    dd if=/dev/zero of=foo.txt bs=14MB count=1
    

                                                                              या

    head -c 14MB /dev/zero > foo
    
  4. किसी अन्य फ़ाइल के पहले 14MB डेटा से भरी फ़ाइल बनाएँ:

    head -c 14MB bar.txt > foo
    
  5. किसी अन्य फ़ाइल के अंतिम 14MB डेटा से भरी फ़ाइल बनाएँ:

    tail -c 14MB bar.txt > foo
    

उपरोक्त सभी उदाहरणों में, 14*1000*1000यदि आप चाहें 14*1024*1024, तो फ़ाइल को बदल MBदिया जाएगा M। उदाहरण के लिए:

dd if=/dev/urandom of=foo bs=14M count=1
head -c 14M /dev/zero > foo

fallocate केवल बाइट्स में ही सौदे होते हैं, इसलिए आपको करना होगा (14 * 1024 * 1024 = 14680064)

fallocate -l 14680064 foo

2
धन्यवाद ... यह वांछित आकार की एक फ़ाइल बनाने के मेरे उद्देश्य को भी पूरा करेगा ...
fasil

2
ddअगर कोई सरल, कम संभावित-विनाशकारी दृष्टिकोण है, तो मैं इसके उपयोग के खिलाफ सिफारिश करूंगा।
अनुचर

3
@acolyte I होगा यही कारण है कि प्रत्येक ddसमाधान में एक गैर-dd विकल्प होता है।
टेर्डन

1
विकी प्रविष्टि भी dd (शून्य के साथ) की तुलना में एक विरल फ़ाइल बनाएगी, है ना? en.wikipedia.org/wiki/Sparse_file
माइकल

1
@Michael मैंने जाँच की, बस यकीन है, और मेरे आदेशों में से कोई भी विरल फाइलें पैदा करता है। ddविकि पृष्ठ पर आदेश पूरी तरह से अलग है और उपयोग नहीं करता है /dev/zero। के रूप में के लिए Mया MBअधिक तार्किक है, डेवलपर्स के साथ इसे ले लो। मैन ऑफ द पृष्ठों सिर , पूंछ और dd सभी स्पष्ट रूप से उल्लेख है कि "एमबी = 1000 * 1000, एम = 1024 * 1024"। यह अन्य * निक्स पर अलग हो सकता है।
टेराडॉन

21
dd bs=1MB count=14 if=/dev/zero of=<yourfilename>

चेतावनी dd चुपचाप आपके द्वारा लिखित किसी भी चीज़ को अधिलेखित कर देगी , अगर आप इसे स्वेच्छा से या दुर्घटना से निर्दिष्ट करते हैं। सुनिश्चित करें कि आप समझते हैं dd, उदाहरण के लिए। पढ़ने के साथ dd --help, और आप अपने dd कमांड लाइनों को पेंच नहीं करते हैं या फिर आप आसानी से अपरिवर्तनीय डेटा हानि - कुल भी बना सकते हैं ।

शुरुआत के लिए, if=है इनपुट फ़ाइल और of=है आउटपुट फ़ाइल । कमांड चलाने से पहले हमेशा जांचें कि आपने इसे सही पाया है। :)


13

जादू का प्रयोग करें dd;) आदमी पृष्ठ

$ dd if=/dev/zero of=output.dat  bs=1024  count=14336

कारण 14MB * 1024 = 14336KB, या:

$ dd if=/dev/zero of=output.dat  bs=1MB  count=14

और आपको 14mb output.dat फ़ाइल मिलेगी, जो शून्य से भरी होगी: D


8

यह इसे करने का सबसे तेज़ तरीका होना चाहिए:

SEEK=$SIZE-1
dd if=/dev/zero of=outfile bs=1 seek=$SEEK count=1 

अन्यथा बस एक त्वरित और गंदे सी या पर्ल प्रोग्राम लिखें जो सटीक स्थिति की तलाश करता है और एक एकल बाइट लिखता है। यह एक बहुत तेजी से ब्लॉक पर डेटा डंपिंग की तुलना में तेजी से है।

यदि आप विरल फ़ाइलों से बचना चाहते हैं तो लिनक्स (और संभवतः अन्य प्रणालियों) पर आप fallocate -l <length>से उपयोग कर सकते हैं util-linux

यदि यह अनुपलब्ध है, और आपके पास POSIX अनुरूप प्रणाली है तो आप पॉज़िक्स_फ्लोकेट () लाइब्रेरी कॉल का उपयोग करके एक त्वरित और गंदा प्रोग्राम लिख सकते हैं। पॉज़िक्स_फ्लोकेटेट निर्दिष्ट सीमा के आवंटन की गारंटी देता है ताकि आपको रेंज का बाद में उपयोग करने पर डिस्क-फुल न मिले यदि यह सफलतापूर्वक वापस आती है


6

जबकि ddयह करने के लिए पोर्टेबल तरह से, आदेशों है mkfileऔर xfs_mkfileइस उद्देश्य के लिए विशेष रूप से लिखा गया है और तेजी से कर रहे हैं:

mkfile size[b|k|m|g] filename
xfs_mkfile size[b|k|m|g] filename

पकड़ यह है कि न तो कमांड सार्वभौमिक रूप से उपलब्ध है, इसलिए वे पोर्टेबल स्क्रिप्ट लिखने के लिए अच्छे नहीं हैं। हालांकि, अगर मैं इसे कमांड लाइन के माध्यम से अंतःक्रियात्मक रूप से कर रहा हूं, तो वे कमांड हैं जो मैं उपयोग करता हूं।

डिफ़ॉल्ट रूप से वे शून्य से भरी हुई फाइलें बनाते हैं, न कि विरल (या "छिद्रयुक्त") फाइलें । वे दोनों -nइसके बजाय विरल फाइलें बनाने का विकल्प लेते हैं ।


1

पर्ल के साथ एक और विकल्प है:

perl -e 'print "a" x 1024' > file.txt

यह 1KB फ़ाइल बनाएगा। अपनी पसंद के किसी भी नंबर से 1024 बदलें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.