লিনাক্সের অধীনে কোনও ফাইলকে কোনও আকারে কাটা যায় কীভাবে?


19

আমি ব্রুট-ফোর্সের মাধ্যমে কোনও ফাইলের আকার সঙ্কুচিত করতে চাই, অর্থাৎ, আমি বাকিটির বিষয়ে চিন্তা করি না, আমি কেবল ফাইলটি কাটতে চাই, অর্ধেক বলতে চাই এবং বাকীটি ফেলে দিতে চাই।

প্রথম জিনিসটি যা মনে আসে তা হ'ল পার্লের ছেঁটে যাওয়া । আমি সেই পৃষ্ঠাতে উদাহরণ অনুসরণ করছি এবং ঠিক একই জিনিস করেছি:

seq 9 > test.txt
ls -l test.txt
perl -we 'open( FILE, "< ./test.txt" ) && truncate( FILE, 8 ) && close(FILE);'

তবে ফাইলটির এখনও একই আকার রয়েছে:

$ ls -lgG test.txt
-rw-rw---- 1 18 2013-08-08 09:49 test.txt

আমি এই কাজটি কীভাবে করব?

উত্তর:


62

আপনি ট্র্যাঙ্কেট কমান্ডটি ব্যবহার করতে চাইতে পারেন :

truncate --size=1G test.txt

সাইজ বাইটস, কেবি, কে, এমবি, এম ইত্যাদি হিসাবে নির্দিষ্ট করা যেতে পারে আমি ধরে নিয়েছি আপনি নিজের হাতে পছন্দসই আকারটি গণনা করতে পারেন; যদি তা না হয় তবে আপনি সম্ভবত ফাইলটির বর্তমান আকার সম্পর্কে তথ্য পেতে স্টেট কমান্ডটি ব্যবহার করতে পারেন।


কোরিউটিলস থেকে এর ডকুমেন্টেশন (তথ্য ফর্ম্যাটে)।
ক্রিশ্চিয়ান সিউপিতু

21
perl -we 'open( FILE, "< ./test.txt" ) && truncate( FILE, 8 ) && close(FILE);'

পড়ার জন্য ফাইলটি খোলে। তবে ফাইলটি কেটে ফেলার জন্য আপনাকে এটিকে সংশোধন করতে হবে, সুতরাং কেবল পঠনযোগ্য ফাইল হ্যান্ডেলটি কাজ করবে না। আপনাকে "সংশোধন" মোড ( "+>") ব্যবহার করতে হবে ।

সাইড ইস্যু হিসাবে, এটি সর্বদা আমাকে অবাক করে দেয় যখন লোকেরা সিস্টেম কলগুলি নিঃশব্দে ব্যর্থ হতে দেয় এবং তারপরে কী ভুল হয়েছে তা জিজ্ঞাসা করে। একটি অপরিহার্য একটি সমস্যা নির্ণয়ের অংশ উত্পাদিত ত্রুটি বার্তা এ খুঁজছেন হয়; এমনকি যদি আপনি এটি না বুঝতে পারেন তবে এটি আপনার কাছে সাহায্য চেয়ে তাদের পক্ষে জীবন আরও সহজ করে তোলে।

নিম্নলিখিতগুলি আরও কিছুটা সহায়ক হত:

perl -we 'open(FILE, "<", "./test.txt") or die "open: $!";
          truncate(FILE, 8) or die "truncate: $!";
          close(FILE);'

যদিও স্বীকার করেছেন যে এটি কেবল "অবৈধ যুক্তি" হিসাবে রিপোর্ট করেছিল। তবুও, এটি দরকারী তথ্য এবং সম্ভবত আপনাকে এই সিদ্ধান্তে নিয়ে যেতে পারে যে ওপেন মোডটি ভুল ছিল (যেমন এটি আমার ক্ষেত্রে হয়েছিল)।


3

আপনি tailসর্বশেষ 100000 বাইট কাটা ব্যবহার করতে পারেন , উদাহরণস্বরূপ:

লেজ -c 100000 ফাইল> ফাইল 2

-c আরও বিকল্পের জন্য ফাইলটির চূড়ান্ত 100000 বাইট আউটপুট করে:

ম্যান লেজ

আপনার সবেমাত্র উত্পন্ন ফাইলটি দিয়ে মূল ফাইলটি প্রতিস্থাপন করতে:

এমভি ফাইল 2 ফাইল


2

উপরের উত্তরটি ট্রাঙ্কেটের উদ্ধৃতিটি দুর্দান্ত । ডিডিও কাজটি করবেন:

dd if=test.txt of=test2.txt bs=1 count=8
mv test2.txt test.txt

1
মূল বাক্যাংশটি "প্রদত্ত আকারে" , 1000 বলুন I'll পরিবর্তে আমি সর্বাধিক ভোটপ্রাপ্ত একটিতে উত্তরটি পরিবর্তন করব, যা অন-দ্য ফ্লাইয়ে ইনপুটটিতে কাজ করে - কোনও মধ্যবর্তী ফাইলের প্রয়োজন হবে না।
xpt

0

এড প্রোগ্রামটি ব্যবহার করে ব্যাশ সহ এটি করার সম্পূর্ণ ভিন্ন উপায় রয়েছে। নিম্নলিখিত স্ক্রিপ্ট নির্দিষ্ট ডিরেক্টরিটিতে বসে সমস্ত ফাইলের সর্বশেষ 5000 টি লাইন ধরে রাখবে। এটি সহজেই বেশ কয়েকটি ডিরেক্টরিতে লুপ করা যায়, রেখার সংখ্যা পরিবর্তন করতে পারে ইত্যাদি easily

#!/bin/bash

LOGDIR=/opt/log
SAVELINES=5000

dirs="$LOGDIR"
for dir in $dirs ; do
    files=${dir}/*
    for f in $files ; do
        echo -e "1,-${SAVELINES}d\nwq" | ed $f 1>/dev/null 2>&1
    done
done
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.