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


मैं एक फाइल कैसे बना सकता हूं (उदा touch आदेश या अन्य समान तरीका), लेकिन एक विशिष्ट आकार (उदा। 14 एमबी) के साथ?

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


115
2018-06-18 11:14


मूल


संबंधित एसओ सवाल: stackoverflow.com/questions/257844/... - Der Hochstapler


जवाब:


उपयोग 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 बजाय।


150
2018-06-18 11:26



वाह। बहुत अच्छा, मुझे यह नहीं पता था। - n611x007
आदमी यह सब कहता है: छोटा करें - फ़ाइल के आकार को निर्दिष्ट आकार में छोटा करें या बढ़ाएं - ssedano
वाकई बहूत बढिया। touch हालांकि जरूरत नहीं है, आप बस चला सकते हैं truncate -s 14M filename यह बनायेगा filename सीधे। - terdon
अच्छा ... यह वही है जो मैंने बिल्कुल देखा ... धन्यवाद @ ओलिवर-साल्ज़बर्ग - fasil
ऐसा लगता है कि एक बना है स्पैस फ़ाइल, जबकि नीचे दिया गया जवाब (जो "डीडी" का उपयोग करता है) नहीं करता है। मुझे नहीं पता कि अंतर आपके लिए महत्वपूर्ण है, लेकिन मुझे लगा कि मैं इसे इंगित करूंगा - offby1


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


निम्न आदेश एक 14 एमबी फ़ाइल बनाते हैं 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. एक फाइल भरें \0रों:

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

    या

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

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

    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

96
2018-06-18 11:23



धन्यवाद ... यह वांछित आकार की फाइल बनाने के मेरे उद्देश्य को भी पूरा करेगा ... - fasil
मैं इसके उपयोग के खिलाफ सिफारिश करेंगे dd यदि एक सरल, कम संभावित विनाशकारी दृष्टिकोण है। - acolyte
@acolyte तो मैं होगा। यही कारण है कि प्रत्येक dd समाधान में एक गैर-डीडी विकल्प है। - terdon
विकी प्रविष्टि का कहना है कि डीडी (शून्य के साथ) एक स्पैस फ़ाइल भी बनायेगा, है ना? en.wikipedia.org/wiki/Sparse_file - Michael
@ माइकल मैंने चेक किया, बस सुनिश्चित करने के लिए, और मेरे कोई भी आदेश स्पैस फ़ाइलों का उत्पादन नहीं करता है। dd विकी पेज पर कमांड पूरी तरह से अलग है और इसका उपयोग नहीं करता है /dev/zero। के लिए के रूप में M या MB अधिक तार्किक है, इसे डेवलपर्स के साथ ले लो। के मैन पेज सिर, पूंछ तथा dd सभी स्पष्ट रूप से बताते हैं कि "एमबी = 1000 * 1000, एम = 1024 * 1024"। यह अन्य * निक्स पर अलग हो सकता है। - terdon


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

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

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


21
2018-06-18 11:23





जादू का प्रयोग करें dd ;) मैन पेज

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

14 एमबी * 1024 = 14336 केबी का कारण बनता है, या:

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

और आपको शून्य से भरा 14 एमबी output.dat फ़ाइल मिलेगी: डी


13
2018-06-18 11:20





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

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

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

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

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


8
2018-06-19 04:05





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

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

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

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


6
2018-06-20 04:59





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

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

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


1
2017-12-11 20:00