ফাইল লিখুন, কিন্তু এটি উপস্থিত থাকলে ওভাররাইট


252
echo "text" >> 'Users/Name/Desktop/TheAccount.txt'

আমি কীভাবে এটি তৈরি করব যাতে এটি উপস্থিত না থাকলে ফাইলটি তৈরি করে, তবে এটি ইতিমধ্যে উপস্থিত থাকলে ওভাররাইট করে। এই মুহুর্তে এই স্ক্রিপ্টটি কেবল যুক্ত হয়।


ভাল..এটি দুর্দান্ত। আমি স্বীকার করেছিলাম >> এর চেয়ে একটু আগে >>
জোকস

উত্তর:


411

* নিক্স পাইপগুলি কীভাবে কাজ করবে তার একটি সামান্য বোঝা।

সংক্ষেপে >>পুনঃনির্দেশ অপারেটর নির্দিষ্ট ফাইলের শেষে লাইন যুক্ত করবে, যেখানে একক বৃহত্তর হিসাবে >ফাইল খালি হবে এবং ফাইলটি ওভাররাইট করবে।

echo "text" > 'Users/Name/Desktop/TheAccount.txt'

9
কিছু পরিবেশ এমন কিছু দিয়ে অস্বীকার করে -bash: TheAccount.txt: cannot overwrite existing file
টম রাসেল

16
এছাড়াও, >এবং >>হয় আউটপুট ফেরৎ অপারেটর। পাইপ অপারেটর হয় |
টম রাসেল

22
@BrDaHa দ্বারা উত্তর দেখুন। >|ওভাররাইট বিদ্যমান জোর করতে ব্যবহার করুন
জেক

2
এটি মোটেও সঠিক উত্তর নয় কারণ এটি বিদ্যমান ফাইলটি ওভাররাইট করে না
iWizard

4
এই মন্তব্যগুলি থেকে জ্যাকের জবাবের সাথে উত্তরটি আপডেট করা উচিত, স্বীকৃত উত্তরটি একাধিক উপায়ে ভুল
rm.rf.etc

90

বাশ-এ, আপনি যদি নোক্লোবারকে একটি লা সেট করে থাকেন set -o noclobberতবে আপনি বাক্য গঠনটি ব্যবহার করুন>|

উদাহরণ স্বরূপ:

echo "some text" >| existing_file

ফাইলটি উপস্থিত না থাকলে এটিও কাজ করে


  • নোক্লোবার সেট করা আছে কিনা তা পরীক্ষা করুন: set -o | grep noclobber

  • এই বিশেষ ধরণের অপারেটরের আরও বিশদ ব্যাখ্যার জন্য এই পোস্টটি দেখুন

  • পুনঃনির্দেশ অপারেটরগুলির আরও বিস্তৃত তালিকার জন্য, এই পোস্টটি দেখুন


আপনি কি বাশ শেল ব্যবহার করছেন?
BrDaHa

@ ব্রাডাহা কীভাবে আমি> | এর সাথে স্টার্ডারকে পুনঃনির্দেশ করতে পারি যেমন? আমি চেষ্টা করেছি &> | কিন্তু এটি কার্যকর হয়নি।
টু বুই

@ টুবুই নিশ্চিত হন না কেন এটি আপনার পক্ষে কাজ করছে না। আমার মেশিনে &>| fileকাজ করে। আপনি কোন শেল এবং সংস্করণ ব্যবহার করছেন? zsh জন্য @stimulate উভয় কাজ করা উচিত , ব্যাশ জন্য এটি শুধুমাত্র>|
Griddo

@ গ্রেডো আমার শেলটি বাশ সংস্করণ ৪.৩.৪৮ (১) -প্রথম echo "aaa" &>| test.txtত্রুটি ফলাফল -bash: syntax error near unexpected token |। আমার নোক্লোবার চালু আছে।
তু বুয়

1
@ টুবুই দৃশ্যত আমি সঠিকভাবে পরীক্ষা করছিলাম না। এটি আমার পক্ষেও কাজ করছে না ... তবে ডকুমেন্টেশনে বলা হয়নি যে এটি যাইহোক সম্ভব হওয়া উচিত। আপনাকে সম্ভবত echo "aaa" >| test.txt 2>&1অন্য শেলটি আটকে থাকতে হবে বা ব্যবহার করতে হবে ।
গ্রিডো

40

NylonSmileএর উত্তর থাকা সত্ত্বেও , যা "সাজানোর" সঠিক .. আমি এই পদ্ধতিতে ফাইলগুলি ওভাররাইট করতে অক্ষম ছিলাম ..

echo "i know about Pipes, girlfriend" > thatAnswer

zsh: file exists: thatAnswer

আমার সমস্যাগুলি সমাধান করতে .. আমাকে ... >!, á লা .. ব্যবহার করতে হয়েছিল

[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"

স্পষ্টতই, এই সম্পর্কে সতর্কতা অবলম্বন করুন ...


26
এর অর্থ হল আপনার অ-ডিফল্ট zsh বিকল্প NOCLOBBERসেট রয়েছে। ব্যবহার করুন setopt clobber ডিফল্ট আচরণ পুনঃস্থাপন।
মিশা পলিটোভস্কি

11

যদি আপনার পরিবেশটি ওভাররাইটিংকে মঞ্জুরি দেয় না তবে >পাইপ |এবং teeপরিবর্তে নিম্নলিখিতটি ব্যবহার করুন:

echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'

নোট করুন এটি স্টাডাউটেও মুদ্রণ করবে। যদি এটি অযাচিত হয় তবে আপনি আউটপুটটিকে /dev/nullনিম্নরূপে পুনর্নির্দেশ করতে পারেন :

echo "text" | tee 'Users/Name/Desktop/TheAccount.txt' > /dev/null


2

শুধু লক্ষণীয় যে আপনি যদি নোক্লোবার সেট (যেমন set -o noclobber) রাখার সময় কোনও ফাইলের মধ্যে স্ট্রাইড :: সেরার এবং এসটিডি :: কাউটকে পুনঃনির্দেশ করতে চান তবে আপনি কোডটি ব্যবহার করতে পারেন:

    cmd >|file.txt 2>&1

এ সম্পর্কে আরও তথ্য https://stackoverflow.com/a/876242 এ দেখা যাবে ।

এছাড়াও এই উত্তরের @ টুবুইর প্রশ্নের উত্তর @BrDaHa উপরে 9 ই আগস্ট '18 তে 9:34 এ সরবরাহ করা হয়েছে।


0

একটি ফাইলের সামগ্রী অন্য ফাইলে ওভাররাইট করতে। বিড়াল যেমন ব্যবহার করুন।

echo  "this is foo" > foobar.txt
cat foobar.txt

echo "this is bar" > bar.txt
cat bar.txt

এখন ফুবার ওভাররাইট করতে আমরা নীচের মত একটি ক্যাট কমান্ড ব্যবহার করতে পারি

cat bar.txt >> foobar.txt
cat foobar.txt

এখানে চিত্র বর্ণনা লিখুন


"এখন ফুবার ওভাররাইট করতে ..." - এটি >>সংযোজন করছে, ওভাররাইটিং নয়
ড্রেনাই

-2

আপনার যদি আউটপুট থাকে যাতে ত্রুটি থাকতে পারে তবে আপনি একটি এম্পারস্যান্ড এবং এর চেয়েও বৃহত্তর ব্যবহার করতে চাইতে পারেন :

my_task &> 'Users/Name/Desktop/task_output.log' এটি স্টডার এবং স্টডআউট উভয়ই লগ ফাইলে পুনর্নির্দেশ করবে (কেবলমাত্র স্টডআউটের পরিবর্তে)।


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