একটি বড় ফাইল ছাঁটাই করতে ইউনিক্স শেল স্ক্রিপ্ট


87

আমি একটি ইউনিক্স স্ক্রিপ্ট লেখার চেষ্টা করছি যা 3GB স্পেসে পৌঁছানোর সাথে সাথে কোনও অ্যাপ্লিকেশন দ্বারা অবিচ্ছিন্নভাবে লেখা / খোলার একটি ফাইল কেটে ফেলা / খালি করবে। আমি জানি যে নীচের আদেশটি এটি করবে:

cp /dev/null [filename]

তবে আমি এটিকে একটি ক্রোন জব হিসাবে স্বয়ংক্রিয়ভাবে উত্পাদন পরিবেশে চালাতে যাচ্ছি - কেবল এই জাতীয় কিছু করার সময় আপনি ছেলেরা কোনও সমস্যার মুখোমুখি হয়েছে কিনা তা স্রেফ এখানে পোস্ট করা।


এগুলি প্রোড। লগের কোন মূল্য নেই? আমার প্রডাকশন লগগুলি এক বছরের জন্য রাখার সৌভাগ্য হয়েছিল + (bzip2 -9 fmt এ) এবং কয়েকটি ছোট ছোট ইউটিলিটি ছিল যা কাজের রানটাইমগুলি বের করতে, রেকর্ড প্রক্রিয়াজাতকরণ করতে, এবং যখন একটি স্প্রেডশিটে লোড করা হয়েছিল তখন গণনা করা সহজ ছিল এবং গ্রাফ লোডিং অনুপাত এবং একগুচ্ছ জিনিস। লোড-রেশিও হ্রাসের কারণে আমরা একটি hdwr সমস্যা আবিষ্কার করেছি। হ্যাঁ, সেখানে নিখরচায় নজরদারি করার সরঞ্জাম রয়েছে, তাই এটি আপনার পরিস্থিতির উপর নির্ভর করে। একটি পৃথক বিকল্প হিসাবে, আপনি যদি দেখেছেন logrotate, এটি আপনাকে কিছু মূল্য দিতে পারে (তবে এটি সেট আপ করার সাথে বিরক্ত হবে (কেবল অনুমান করা))।
শেলটার

4
মনে রাখবেন যে লগ ফাইলটি যদি O_APPEND পতাকাটি দিয়ে খোলা হয়, তবে কাটাটি কার্যকর। যদি এটি ও_এপিপিএন্ড পতাকা দ্বারা না খোলা হয়, তবে প্রোগ্রামটি অফসেট 3 জিআইবি (প্রথমবার) এ লেখা চালিয়ে যাবে; সিস্টেমটি প্রথম 3 জিআইবিকে অল-বাইট-শূন্য হিসাবে বিবেচনা করবে (যা ভালভাবে সংকোচিত হয়) তবে ফাইলটি বাড়তে থাকবে। এটি সমস্ত লগ লেখার প্রোগ্রামের উপর নির্ভর করে।
জোনাথন লেফলার

উত্তর:


116

শুধু অন্য উত্তর যুক্ত করতে,

: > filename

: বাশ-এর ​​কোনও বিকল্প নেই (পসিক্স-কমপ্লায়েন্ট), সুতরাং এটি মূলত কেবল লেখার জন্য ফাইলটি খোলে (অবশ্যই কোনটি ফাইলকে ছাঁটাই করে) এবং তারপরে তা অবিলম্বে এটি বন্ধ করে দেয়।

সম্পাদনা: শেল্টারের মন্তব্য হিসাবে, আপনাকে পুনঃনির্দেশের সাথে যেতে আসলে কমান্ডের দরকার নেই:

$ echo foo > foo.txt
$ cat foo.txt
foo
$ > foo.txt
$ cat foo.txt
$

একটি সাধারণ পুনঃনির্দেশ নিজেই ফাইলটি সাফ করবে।


25
বা ঠিক > filename(যেমন আমি নিশ্চিত আপনি জানেন) সবার জন্য শুভ কামনা.
শেলটার

4
@ শেল্টার "$> ফাইল" পোসিক্স নয় এবং বহনযোগ্য নয়। আপনাকে প্রথমে পরামর্শ মত পুনর্নির্দেশের আগে ":" নো-অপ্ট কমান্ডটি ব্যবহার করা উচিত।
অ্যারন টপোনস

4
হাসিখুশি মুখের জন্য + প্লাস
ক্রিস সুজিস্কি

4
@ অ্যারোনটপোনেস যেমন প্রকাশ করেছেন, "file> ফাইল" সত্যই বহনযোগ্য নয়; আমার জেডএস সেটআপে এটি শেলটি স্তব্ধ করে তোলে (ধারণা করা হয় ইনপুটটির জন্য অপেক্ষা করা)। "$:> ফাইল" Zsh এ ঠিকঠাক কাজ করে।
লিনাস আরভার

4
এই টুইটটি আপনার প্রত্যাশার উপর নির্ভর করে কাটাটি নিজেই পারমাণবিক, তবে কোনও নির্দিষ্ট লেখার তুলনায় এটি কখন ঘটবে তা সত্যই আপনি জানেন না। উদাহরণস্বরূপ, আপনি ফাইলের শুরুতে একটি আংশিক লাইন দিয়ে বাতাস আপ করতে পারেন।
চ্যানার

66

আমি ডিবিয়ানে নিম্নলিখিত কমান্ডটি ব্যবহার করেছি

truncate -s 0 filename

@ স্টিভক্লে: sudo sh -c ': > filename'এছাড়াও filename
ছাড়বে

4
@SteveClay Ops পরামর্শ সাথেও flawlessly কাজ করে sudo: sudo cp /dev/null filename। এছাড়াও cpপোর্টেবল থাকাকালীন truncateআধুনিক লিনাক্স মাত্র।
টিনো

11

এটা আমার কাছে যুক্তিসঙ্গত মনে হয়। ইউনিক্স অবশ্যই আপনাকে প্রায় 50 টি বিভিন্ন উপায়ে এটি করতে দেয়। উদাহরণ স্বরূপ,

echo -n "" >filename
cat /dev/null >filename

2

trunc filename

ইউনিক্সের এআইএক্স স্বাদে কাজ করে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.