কোনও ফাইলের বিষয়বস্তু খালি করুন


220

একটি ফাইল থেকে সমস্ত এন্ট্রি মুছতে তিনটি পদ্ধতি সম্পর্কে আমি সচেতন।

তারা হয়

  • >filename
  • touch filename
  • filename < /dev/null

এই তিনটির মধ্যে আমি >filenameসবচেয়ে বেশি আপত্তি জানাই কারণ এর জন্য সর্বনিম্ন সংখ্যার কীস্ট্রোক প্রয়োজন।

তবে, আমি জানতে চাই যে বড় লগ ফাইল এবং ছোট ফাইলগুলির ক্ষেত্রে তিনটি (যদি আরও দক্ষ কোনও পদ্ধতি থাকে তবে )গুলির মধ্যে সবচেয়ে দক্ষ is

এছাড়াও, তিনটি কোড কীভাবে সামগ্রীগুলি পরিচালনা করে এবং মুছতে পারে?


24
কি হবে truncate -s 0 filename?
মার্টিন থোমা


প্রথম কেবল বাশ কমান্ড লাইন থেকে ডাকা হলে কাজ করবে তবে একটি .sh ফাইলে মৃত্যুদন্ড কার্যকর করা হলে কাজ করবে না
মার্কো মার্শালা

8
স্পর্শ সামগ্রীগুলি মুছে না, তবে ফাইলটিতে অ্যাক্সেসের সময় পরিবর্তন করে। এটির কোনও অস্তিত্ব না থাকলে এটি খালি ফাইল তৈরি করে ।
hbogert

উত্তর:


293

প্রকৃতপক্ষে, দ্বিতীয় ফর্মটি touch filenameফাইল থেকে কোনও কিছুই মুছবে না - এটি কেবল একটি খালি ফাইল তৈরি করে যদি কারও অস্তিত্ব না থাকে বা বিদ্যমান ফাইলের শেষ-সংশোধিত তারিখ আপডেট করে।

এবং তৃতীয়টি ইনপুট হিসাবে filename < /dev/nullফাইলের নাম চালানোর চেষ্টা করে /dev/null

cp /dev/null filename কাজ করে।

দক্ষ হিসাবে, সবচেয়ে দক্ষ হবে truncate -s 0 filename; এখানে দেখুন: http://linux.die.net/man/1/truncate

অন্যথায়, cp /dev/null filenameবা > filenameউভয়ই ঠিক আছে। তারা উভয়ই খুলুন এবং তারপরে ট্রান্সকেট অন-ওপেন সেটিংস ব্যবহার করে ফাইলটি বন্ধ করুন close cpএছাড়াও খোলে /dev/null, যাতে এটি সামান্য ধীর হয় makes

অন্যদিকে, কোনও স্ক্রিপ্ট থেকে চালিত হওয়ার truncateচেয়ে সম্ভবত ধীর গতি হতে পারে > filenameযেহেতু ট্রাঙ্কেট কমান্ডটি চালানোর জন্য সিস্টেমটি এক্সিকিউটেবলকে খোলার, এটি লোড করার এবং চালানোর প্রয়োজন হয়।


9
তাহলে আপনি কেন বলছেন যে truncateসবচেয়ে দক্ষ?
স্টাফেন চেজেলাস

7
ট্র্যাঙ্কেট অপারেশনটিতে ফ্রন্টুনেট () বা ট্রুনকেট () সিস্টেম কল ব্যবহার করা হয় যা ফাইলটি খোলার পক্ষে বিরক্ত করে না। এটি সিপি এবং > filenameপদ্ধতিগুলির কল করার জন্য যে ক্লোজ () সিস্টেম কলটি এড়ানো যায় তা এড়িয়ে যায় ।
ছাই

3
প্রকৃতপক্ষে, এটি (কমপক্ষে জিএনইউ এক) একটি ওপেন + ফ্রন্টকিট + বন্ধ করে (অনেকগুলি সিস্টেম কল এটি নিজেই লোড করতে এবং আরম্ভ করার জন্য করে), যাইহোক, ফাইলটি উপস্থিত না থাকলে এটি তৈরি করতে হবে এবং truncate(2)এটি না।
স্টাফেন চেজেলাস

যদি আমরা ব্যবহার করি touch filenameতবে কী ইনোড একই থাকবে (আগে কোনও ফাইল থাকত)?
পিএমমান

1
@ পিএম হ্যাঁ, আপনি এটি চেষ্টা করে দেখতে পারেনls -i
টেরডন


3

এখানে একটি বিল্টিন কমান্ড রয়েছে: "sh", sh, csh, bash এবং অন্যদের মধ্যে উপলভ্য, যা সহজেই পুনর্নির্দেশের আউটপুট অপারেটরের সাথে >একটি ফাইল কেটে ফেলা যায়:

#!/usr/bin/env bash
:> filename

আমি এটিতে যা পছন্দ করি তা হ'ল এর জন্য "ইকো" ইত্যাদির মতো কোনও বাহ্যিক কমান্ডের প্রয়োজন হয় না

ফাইলগুলি মুছে ফেলা / পুনরায় তৈরি করার পরিবর্তে ছাঁটাই করার একটি বড় সুবিধা হ'ল এই ফাইলের সাথে কাজ করা অ্যাপ্লিকেশনগুলি (উদাহরণস্বরূপ কেউ একটি tail -f filenameবা একটি মনিটরিং সফটওয়্যার তৈরি করে ...) এটি আবার খুলতে হবে না। তারা কেবল ফাইলডেস্ক্রিপ্টর ব্যবহার চালিয়ে যেতে পারে এবং সমস্ত নতুন ডেটা পায়।


man bash:শেল বিল্টিনের কোনও প্রভাব নেই বলে বর্ণনা করে ।
Haxiel

হ্যাঁ, এবং আপনি এটিকে >ফাইলে পুনঃনির্দেশ করুন, যা উপস্থিত না থাকলে ফাইল তৈরি করে এবং যদি এটি উপস্থিত থাকে তবে আপনি এটি শূন্যে কেটে ফেলুন। আরও ভাল বলেছেন: আপনি :কিছু >না করার জন্য এবং কোনও ফাইলকে কিছুই পুনর্নির্দেশ করতে এবং এটি কেটে ফেলার জন্য ব্যবহার করেন।
মিরকো স্টেইনার

1
তুমি ওটা কেন করবে? > fileএকটি ফাইল কাটা যথেষ্ট। আপনার কোনও কমান্ডের দরকার নেই, কেবল পুনর্নির্দেশ অপারেটর।
টেরডন

1
কখনও কখনও, > filenameকাজ করবে না। উদাহরণস্বরূপ, zsh এ কিন্তু : > filenameএখনও কাজ করে।
সিএস পেই

বাশ এবং শ দেখতে পছন্দ করে > myfileতবে উদাহরণস্বরূপ সিএসএস ত্রুটিগুলি: অবৈধ নাল কমান্ড।
মিরকো স্টেইনার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.