কমান্ড লাইন থেকে কোনও ফাইলের বিষয়বস্তু কীভাবে সাফ করবেন?


279

আমার কাছে একটি লগ ফাইল রয়েছে যাতে এতে গুচ্ছ জিনিস থাকে যা আমার আর প্রয়োজন হয় না। আমি বিষয়বস্তু সাফ করতে চাই।

আমি কীভাবে সামগ্রীগুলিকে স্ক্রিনে মুদ্রণ করতে জানি:

cat file.log

আমি জানি কীভাবে ফাইলটি সম্পাদনা করতে হবে, লাইন-লাইন:

nano file.log

তবে আমি একবারে প্রতিটি লাইন মুছে ফেলতে চাই না। ফাইলটি না করে বিনষ্ট না করে কি এক আদেশে এটি করার কোনও উপায় আছে?

উত্তর:


464

বাশ, ঠিক

> filename

করব.

এটি আপনাকে খালি ফাইলের ফাইল নাম দিয়ে ছেড়ে দেবে ।

PS

আপনার যদি sudoকল প্রয়োজন , দয়া করে এখানে উত্তরtruncate হিসাবে ব্যবহার বিবেচনা করুন


57
এটি সম্ভবত কম্পিউটিংয়ের ইতিহাসের সবচেয়ে রেডেস্ট কমান্ড
ব্লগার করুন

7
বিপরীতে, @ আরেক্কুশন্দা.ইরুজাসুকিন; এটি উইন্ডোজের যে কোনও সংস্করণে ঠিক কাজ করে, যতক্ষণ না উল্লিখিত রয়েছে, আপনি bashনিজের শেল হিসাবে ব্যবহার করছেন এবং উদাহরণস্বরূপ cmd.exeবা পাওয়ারশেল নয়, যার মধ্যে কোনওটিই প্যাসিক নয় যা এই জাতীয় জিনিসগুলি পরিচালনা করার জন্য প্রত্যাশিত।
ডোপঘোতি

124

আপনি ব্যবহার করতে পারেন ব্যবহারকারী কমান্ড: ছাঁটাই un

truncate -s 0 test.txt

("-s 0" আকার নির্দিষ্ট করতে)

http://www.commandlinefu.com/commands/view/12/empty-a-file


3
চারপাশের সেরা উত্তর, যখন আপনি অ-রুট নন (সুডো সহ) তখন কাজ করে - sudo echo > fileযেমন ক্ষেত্রে কেবল একটি ত্রুটি দেয়।
দিমিত্রি ভার্খোটুরভ

12
@ দিমিত্রিভেরখোটুরভ: sudo bash -c '> filename'আপনি কীভাবে সুদোর সাথে বাশ সমাধান ব্যবহার করেন।
স্টুয়ার্ট পি। বেন্টলে

1
brew install truncateহোস্টব্রু ইনস্টল করে ওএস এক্স-এ।
xaxxon

প্রতিধ্বনির চেয়ে দ্রুত কাজ করে
মিয়াও 1007

34

আপনি এটি করতে পারেন:

echo -n "" > file.log

ব্যবহার >থেকে (নাল) ইনপুট লিখতে echo -nফাইলে।

ব্যবহার >>করবে সংযোজন ফাইলে নাল ইনপুট (কার্যকরভাবে অসম্মতির কিন্তু touchএটা ing)।


এটি সেখানে একটি জায়গা ছেড়ে যাবে।
ডিএমকেেকে

আমি এটি পাচ্ছি: -বাশ:: কমান্ডটি পাওয়া যায় নি
অ্যান্ড্রু

3
প্রতিধ্বনি ""> আপনাকে এখনও একটি অক্ষর (একটি নিউলাইন।) দিয়ে একটি ফাইল দেবে আপনি যদি প্রতিধ্বনি ব্যবহার করতে চান তবে প্রতিধ্বনিত করতে "echo -n> file.log" ব্যবহার করুন cho
ডেভ ভুলেজ

true(অথবা এর বিল্টিন ওরফে :) মতো ডেডিকেটেড নাল-আউটপুট কমান্ড ব্যবহার করা ভাল , যদিও শেষ পর্যন্ত আপনার কোনও কমান্ডের প্রয়োজন নেই (স্বীকৃত উত্তর দেখুন)।
স্টুয়ার্ট পি। বেন্টলে

আপনার কিছু সমস্যা হতে পারে sudo
ফ্ল্যাপজ্যাক

27
: > file.log

> filenameবাশের মতো একই , তবে আরও শেল (ক্রেডিট) এ কাজ করেtrueবিল্টিন (যার কোনও আউটপুট নেই) থেকে আউটপুট পুনর্নির্দেশ করে filename


আমি এই উত্তরটি দিতে এসেছি, তবে হায় হায় এটি ইতিমধ্যে এখানে ... একটি পর্যালোচনা নিন।
অ্যারন হল

5
শুধু কর :> filename। হাসির মতো মনে হচ্ছে না? :>
minmaxavg

10

ZSH

>! filename

জেডএসএইচ আইও পুনঃনির্দেশ অপারেটরটি ব্যবহার করে ব্যবহারকারীদের ক্লোবার্বিংয়ের হাত থেকে রক্ষা করবে >। আপনি যদি ব্যবহার করেন তবে >!আপনি কোনও বিদ্যমান ফাইলটি কাটাতে বাধ্য করতে পারেন।

আপনি যদি জেডএসএইচকে বাশের পুনঃনির্দেশ আচরণ ব্যবহার করতে চান তবে যদি ফাইল ক্লোবার্বিংয়ের কোনও সুরক্ষা না থাকে তবে clobberআপনার শেলের জন্য আপনার বিকল্পটি সেট করতে হবে ।

আরও তথ্য: http://zsh.sourceforge.net/Doc/Re कृपया / Redirection.html


8

যদি আপনি কমান্ড লাইনের কোনও ভিআইএম সম্পাদকের ভিতরে থেকে করতে চান তবে আপনি এটি চেষ্টা করতে পারেন:

vim file.txt 

টিপুন Esc

:1,$d

টিপুন Enter

আপনি সমস্ত লাইন মুছে ফেলা হবে।


এটি আমার জন্য কাজ করা একমাত্র জিনিস maillog, এমনকি sudo > /var/log/maillogএটি পরিষ্কারও করবে না (অনুমতি অস্বীকার করা হয়েছে)
বোবোবো

2
@ বোবোবোও এটি sudo > /var/log/maillogঅর্থ হিসাবে কাজ করে না - সুডো চালান, এবং এর আউটপুটটি ফাইলে রাখুন। স্পষ্টতই এটি বর্তমান ব্যবহারকারীর অনুমতি নিয়ে আউটপুট রাখে। sudo suরুট শেল আরম্ভ করার জন্য আরও সহজ কাজ > /var/log/maillog
কান

4
$ rm file.log; touch file.log

অথবা

$ cat > file.log

দ্বারা অনুসরণ control-d

বা ... বা ... বা ...

আহ। এখানে একটি একক কমান্ড সংস্করণ:

$ dd if=/dev/null of=file.log

2
আপনি echo "" > file.logযে catবিকল্পটি দেখিয়েছেন তার চেয়ে থেকিকেনমোর পরামর্শটি আরও ভাল , এই পরিস্থিতিতে অন্যরাও আছেন যেখানে catআরও উপযুক্ত। উভয় ভারী উত্তোলন করতে একই শেল পুনর্নির্দেশ ব্যবহার করে।
কোয়াকোট কোয়েক্সোট

2
আপনার ক্যাট কমান্ড চালানোর দরকার নেই। কেবল "> file.log" এটি করবে।
ক্যামহ

ফাইলটি সরিয়ে ফেলার ফলে তারিখটি পুনরায় সেট হবে।
মাত্তেও

ফাইলটি অপসারণের ফলে সেই ফাইলটি দেখার প্রোগ্রামগুলি তার পয়েন্টারটি হারিয়ে ফেলবে (যেমন, ফাইল সিস্টেমে এটির একটি নতুন ঠিকানা থাকবে)। সাধারণত বললে, হ্যাঁ rmএকই নাম দিয়ে খালি ফাইল তৈরির কাজটি সম্পাদন করবে। তবে এটি প্রতিটি ব্যবহারের ক্ষেত্রে সঠিক হবে না।
রবার্ট


2

আপনার যদি ফাইলটি অ্যাক্সেস করার জন্য সুপারভাইজার সুবিধার্থে sudo দরকার হয় তবে গ্রহণযোগ্য উত্তরটি কাজ করবে না। এটি ব্যবহার করে কাজ করে:

truncate -s0 file

বা সুডো সহ স্পষ্টভাবে:

sudo truncate -s0 file

এখানে আরও তথ্য http://www.commandlinefu.com/commands/view/12/empty-a-file


1

কয়েকটি বিকল্প:

ex +%d -scwq file.log
cp /dev/null file.log
vi +%d -escwq file.log
install -m600 /dev/null file.log

1

আপনার যদি ফাইলনামে ফাঁকা স্থান থাকে তবে ব্যবহার করুন:

for file in /path/to/file/*; do > "$file"; done

(আমি পূর্ববর্তী উত্তরের মন্তব্যে এটি অন্তর্ভুক্ত করতে পারিনি কারণ আমার 50 টি খ্যাতি নেই Sometimes


0

এক সময় এক লাইন?

Vi (মি), সুন্দর পাঠ্য সম্পাদক যা কিছু করতে পারে তা চেষ্টা করুন। এই ক্ষেত্রে, একটি লাইনে নেভিগেট করুন, টিপুন (মুছে ফেলার জন্য), এবং d আবার (লাইনের জন্য)।


5
আপনি যদি ডকুমেন্টের শীর্ষে কার্সার সহ পুরো ফাইলটি ভিআইএম থেকে মুক্তি পেতে চান তবে ডি জি টাইপ করলে (সেই ডি, তারপরে শিফট-জি) পুরো ফাইলটি মুছে ফেলবে (মুছে ফেলার জন্য ডি, জি শেষের জন্য জি) ফাইল)। আমি আপনার পদ্ধতিটিকে প্রাধান্য দিই, যদিও (এটি সত্যই আমি ফাইলটি ট্র্যাশ করতে চাই কিনা তা নিয়ে ভাবতে আরও সময় দেয়)।
বাবু

@ বাবু শীর্ষে ggচলে যান যাতে পুরো ক্রমটি হতে পারে ggdG
বব

0

আমার অনুমতি নিয়ে এটিই কেবল কাজ করেছিল:

touch temp.txt
sudo mv temp.txt original-file.txt

0

এছাড়াও, আপনার যদি একাধিক ফাইল থাকে তবে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

for file in /path/to/file/*; do > $file; done

এটি একই ডিরেক্টরিতে লগ ফাইলগুলির জন্য সহায়ক।


0

> a.txt

বাশে ফাইলের নাম হিসাবে একই, তবে আরও শেল (ক্রেডিট) এ কাজ করে। প্রকৃত বিল্টিন (যার কোনও আউটপুট নেই) থেকে ফাইলনামে আউটপুট পুনর্নির্দেশ করে।

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