ব্যাশে, আমি কীভাবে পুনরাবৃত্তি না করে কোনও ফাইলের নাম পরিবর্তন করতে পারি? [প্রতিলিপি]


39

সম্ভাব্য সদৃশ:
ব্যাশ কমান্ডের পাঠ্য পুনরায় ব্যবহার করুন

আমি যদি কয়েকটি ডিরেক্টরি গভীরভাবে কোনও ফাইলের নাম পরিবর্তন করতে চাই, তবে কীভাবে আমি পুনরাবৃত্তিটি এড়াতে পারি?

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

mv path/to/old_filename.txt path/to/new_filename.txt

আমি ভাবছি এটি করার কোনও উপায় আছে কিনা:

mv path/to/old_filename.txt (?)new_filename.txt

(?)"একই ডিরেক্টরিতে" বলার কিছু উপায় কোথায় থাকবে।

উত্তর:


26

ব্যাশের ইতিহাস সম্প্রসারণ ব্যবহার :

mv path/to/oldfile !#:1:h/newfile

যেখানে !#:1:hএটি থেকে: - (মাথা "জ") মানে: লাইন থেকে আপনি বর্তমানে টাইপ করছেন ( "! #"), প্রথম শব্দ গ্রহণ ( "1"), তারপর শুধুমাত্র পাথ উপাদান গ্রহণ করা।


এটি মূল প্রশ্নকর্তা সমাধানটি কী হতে পারে বলে ধরে নিয়েছেন তার সবচেয়ে নিকটতম এবং এটি জানতে দরকারী, সুতরাং +1 1
উন্মাদ 2

2
শান্ত! আমি মনে করি ডার্টের ব্রেস প্রসারিত পদ্ধতিটি সহজ, তবে আমি এটি যা চেয়েছিলাম ঠিক এটি।
নাথান লং

আমি আজ দুটি দুর্দান্ত নতুন জিনিস শিখেছি। এছাড়াও, আমি চিরকাল ব্রেস সম্প্রসারণকে "দারথের ব্রেস এক্সপেনশন" হিসাবে ভাবব কারণ এটি দুর্দান্ত লাগে।
পাইলঅফমুশ

62

আপনি বন্ধনী সম্প্রসারণ ব্যবহার করতে পারেন: mv path/to/{old_filename.txt,new_filename.txt}

এখানে বাশ শেলটিতে ব্রেস প্রসারণ সম্পর্কিত জিএনইউ গাইডের একটি লিঙ্ক রয়েছে যা বিকল্পগুলির একটি তালিকা নির্ধারণ করে এবং প্রতিবার পুনরাবৃত্তি করার সাথে সাথে প্রতিস্থাপনটি পৃথক বিকল্প ব্যবহার করে প্যারামিটারটি পুনরাবৃত্তি করতে ব্যাশকে বলে।

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

a{b,c,dd,e}

প্রসারিত হবে

ab ac add ae

একমাত্র সতর্কতাই হ'ল সম্প্রসারিত পুনরাবৃত্তিগুলি অবশ্যই লক্ষ্য প্রোগ্রামের তর্ক হিসাবে একে অপরকে অনুসরণ করতে সক্ষম হতে হবে।


5
অথবা এটা ন্যূনতম পালন: mv path/to/{old,new}_filename.txt। এটি বিপরীত বা অন্যান্য ধরণের কাছের-কাছ থেকে পুনরায় পুনরুক্তি করতে সহায়তা করে। আমি অনেকবার করেছি যেমন mv /etc/X11/xorg.conf{,.backup}, সাধারণ পরিবর্তনের মাধ্যমে প্রক্রিয়াটি বিপরীত করতে সক্ষম হয়ে mv /etc/X11/xorg.conf{.backup,}
ড্যানিয়েল অ্যান্ডারসন

26

উপরে ডারথের উত্তরটি চতুর, তবে আপনি যদি কোনও পদ্ধতির সাথে ব্যবহার করতে চান তবে আপনি cdএকটি সাব-শেল ব্যবহার করে বিবেচনা করতে পারেন:

(cd path/to && mv old_filename.txt new_filename.txt)

ডিরেক্টরি পরিবর্তনটি সাব-শেলের মধ্যে স্থান নেওয়ার কারণে আপনি প্রকৃতপক্ষে আপনার ইন্টারেক্টিভ শেলের ডিরেক্টরি পরিবর্তন করবেন না।


1
তাত্পর্যপূর্ণ ত্রুটি: আপনি এর জন্য ট্যাব-সমাপ্তি ব্যবহার করতে পারবেন না old_filename.txt
bluenote10

9

আর একটি বিকল্প কার্যকর যা আপনি ডিরেক্টরিতে বেশ কয়েকটি কমান্ড করতে চলেছেন তা হ'ল:

pushd /path/to
mv oldfile newfile
...
popd

5

আমি @ দার্ট এর উত্তর পছন্দ করি । এখানে একটি বিকল্প রয়েছে:cd path/to && mv oldfile newfile && cd -


1
যদি mvব্যর্থ হয় তবে দ্রষ্টব্য (উদাহরণস্বরূপ কোনও অনুমতি নেই) আপনাকে path/toডিরেক্টরিতে রেখে দেওয়া হবে । আপনি সর্বদা চালিত cd path/to && mv oldfile newfile ; cd -হয় তা নিশ্চিত করার চেষ্টা করতে cd -পারেন, যদি cd path/to(কোনও অনুমতি নেই) ব্যর্থ হয় তবে আপনি এখনও সম্পাদন করতে পারবেন cd -এবং অযাচিত যা পূর্ববর্তী ডিরেক্টরিতে যান। এমএলসি (+1) সাব-শেল উত্তর ভাল। আমি অনুমান করি cd . && cd path/to && mv oldfile newfile ; cd -99.9% সময় কাজ করবে ( cd .কেবলমাত্র যদি আপনি বা আপনার বর্তমান ডায়ারের অনুমতি পরিবর্তিত হয় তবেই ব্যর্থ হয়; এবং সেই ক্ষেত্রে অন্য
দিরের
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.