फ़ाइल अंत भाग को काटने के लिए `dd` का उपयोग करें


18

ऐसा करने के लिए शायद सरल चाल है, लेकिन मैं मैन पेज से नहीं समझ सकता।

मैं उदाहरण के लिए, अनिर्धारित आकार के साथ फ़ाइल से अंतिम 1MB कैसे काटूं dd?


1
आप उस फ़ाइल की एक प्रति चाहते हैं, सिवाय अंतिम 1MB के, या क्या आप चाहते हैं कि अंतिम MB किसी अन्य फ़ाइल की प्रतिलिपि बनाई जाए?
मैट

मैं अंतिम 1MB
zetah

जवाबों:


29

ठीक है, आप मान रहे हैं statऔर bash, आप फ़ाइल का आकार प्राप्त कर सकते हैं:

stat -c %s your_file

यदि आप $amountउस फ़ाइल के लिए अंतिम बाइट निकालना चाहते हैं dd, तो आप निम्न कार्य कर सकते हैं:

dd if=your_file of=extracted_part \
   bs=1 count=$amount \
   skip=$(( $(stat -c %s your_file) - $amount ))

लेकिन सान करने के लिए दृष्टिकोण का उपयोग करना होगा tail:

tail -c $(( 1024*1024 )) your_file > target_file

के लिए कोई -cविकल्प नहीं head?
ADTC

मुझे लगता है कि उनका मतलब + $ ((1024 * 1024)) था: -c, --bytes = K अंतिम K बाइट्स आउटपुट; वैकल्पिक रूप से, प्रत्येक फाइल के Kth से शुरू होने वाले आउटपुट बाइट्स के लिए -c + K का उपयोग करें
Vanuan

5
dd --help
उपयोग: dd [OPERAND] ...
  या: dd विकल्प
ऑपरेंड्स के अनुसार एक फाइल कॉपी, कंवर्ट और फॉर्मेट करना।

  bs = BYTES एक बार में BYTES बाइट्स पढ़ें और लिखें (यह भी देखें ibs =, obs =)
  cbs = BYTES एक बार में BYTES बाइट्स कन्वर्ट करें
  conv = CONVS फ़ाइल को अल्पविराम से अलग प्रतीक सूची के अनुसार परिवर्तित करते हैं
  गणना = BLOCKS केवल BLOCKS इनपुट ब्लॉक कॉपी करता है
  ibs = BYTES एक बार में BYTES बाइट्स पढ़ें (डिफ़ॉल्ट: 512)
  if = स्टाइल के बजाय FILE से FILE पढ़ें
  iflag = FLAGS कॉमा से अलग प्रतीक सूची के अनुसार पढ़ा जाता है
  अवलोकन = BYTES एक समय में BYTES बाइट्स लिखता है (डिफ़ॉल्ट: 512)
  की = स्टिलआउट के बजाय फाइल को FILE में लिखें
  tolag = FLAGS कॉमा से अलग प्रतीक सूची के अनुसार लिखें
  तलाश = BLOCKS आउटपुट की शुरुआत में BLOCKS ऑब्जर्व-आकार के ब्लॉक छोड़ें
  छोड़ें = BLOCKS इनपुट के प्रारंभ में BLOCKS ibs- आकार के ब्लॉक छोड़ें
  स्थिति = noxfer अंतरण सांख्यिकी को दबाती है

निम्नलिखित गुणात्मक प्रत्ययों द्वारा BLOCKS और BYTES का अनुसरण किया जा सकता है:
c = 1, w = 2, b = 512, kB = 1000, K = 1024, MB = 1000 * 1000, M = 1024 * 1024, xM = M
GB = 1000 * 1000 * 1000, G = 1024 * 1024 * 1024, और इतने पर T, P, E, Z, Y के लिए।

यदि फ़ाइल का आकार बिल्कुल 10MB, 1024 * 10 10240K है तो यह अंतिम 1024K को छोड़ देगा। आपको उस ब्लॉक आकार को निर्दिष्ट करना चाहिए जिसे आप ibs और अवलोकन विकल्पों का उपयोग करके काम कर रहे हैं।

1M = 1024K 
1024*9 = 9216  
dd if=/10/MB/file of=/9/MB/file count=9216K ibs=1K obs=1K
dd if=/10/MB/file of=/9/MB/file count=9M ibs=1M obs=1M

आप फ़ाइल के पहले 1MB को भी छोड़ सकते हैं, पहले 1MB को छोड़ते हुए फ़ाइल के अंत में पढ़ने के लिए स्किप विकल्प का उपयोग कर सकते हैं।

dd if=/10/MB/file of=/9/MB/file skip=1M ibs=1M obs=1M

चाहने वाले विकल्प का उपयोग करके आप अपनी आउटपुट फ़ाइल में एक विशिष्ट स्थान पर लिख सकते हैं। मान लें कि आप पहले 1MB रखना चाहते हैं और अंतिम 8MB लिखना चाहते हैं।

dd if=/10/MB/file of=/9/MB/file skip=1M seek=1M count=8M ibs=1M obs=1M

आपको अपने फ़ाइल आकार के बारे में कुछ विवरण प्राप्त करने की आवश्यकता है ताकि यह सुनिश्चित किया जा सके कि आपको सही मात्रा में डेटा अंदर और बाहर मिल रहा है।

ls -s --block-size 1K ./my/10MB/file
आदमी एल.एस.

       --block आकार = आकार
              SIZE-बाइट ब्लॉकों का उपयोग करें। नीचे SIZE प्रारूप देखें

       -s, - आकार
              ब्लॉक में प्रत्येक फ़ाइल के आबंटित आकार को प्रिंट करें

       SIZE हो सकता है (या हो सकता है कि एक पूर्णांक इसके बाद वैकल्पिक रूप से हो)
       निम्नता: KB 1000, K 1024, MB 1000 * 1000, M 1024 * 1024, और इसी तरह G, T, के लिए
       पी, ई, जेड, वाई।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.