ডিরেক্টরি পাথটি পুনরাবৃত্তি না করে দীর্ঘ ডিরেক্টরি পথের সাথে কমান্ড লাইন সরানো ফাইল


16

mvদ্বিতীয় যুক্তিতে পুরো পথটি টাইপ না করে কমান্ড কার্যকর করার কোনও উপায় আছে কি ?

উদাহরণ:

mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz


1
কোনও কারণ আপনি কেবল cdডিরেক্টরিতে এবং mvসেখান থেকে করতে পারবেন না ?
— zpletan

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

একরকম আমি এটি ব্যবহার করে দেখতে পেলাম !! (ডাবল বিস্মৃতি চিহ্ন) একটি টার্মিনালে শেষ কমান্ড চালানো ব্যবহার করে। আপনি সর্বশেষ কমান্ডে প্যারামিটার / পাঠ্য যুক্ত করতে পারেন কিন্তু শেষ আদেশ থেকে পাঠ্য পরিবর্তন / সরানোর চেষ্টা করেন নি। এটি ব্যবহার করে দেখুন এবং যদি আপনি সফল হন তবে আমি এটি একটি উত্তরের মতো ফেলে দেব। শুভকামনা!
— Geppettvs D'Constanzo

উত্তর:


32

আপনি বাশের ব্রেস প্রসারণ ব্যবহার করতে পারেন। এই:

mv my/file/that/has/a/really/long/path/foo.{bar,baz}

এর মধ্যে প্রসারিত হবে:

mv my/file/that/has/a/really/long/path/foo.bar my/file/that/has/a/really/long/path/foo.baz

এবং তারপরে mvসেই দুটি যুক্তি দিয়ে চালানো হয়। ব্রেস প্রসারণ সম্পর্কে আরও জানতে http://wiki.bash-hackers.org/syntax/expansion/brace দেখুন ।


3
এটি গৌরবময়। আমি জানতাম না যে আপনি এটি করতে পারবেন।
— ফিনব্বর

5

ব্রেস প্রসারণের বিকল্প হিসাবে, আপনি ব্যাশ শেলের ইতিহাস সম্প্রসারণ বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন :

  • ! ইতিহাস বিস্তারের পরিচয় দেয়
  • # ইভেন্ট ডিজাইনার বর্তমান কমান্ডটি চিহ্নিত করে
  • $ শব্দ ডিজাইনার শেষ যুক্তি উল্লেখ করে

আপনি একটি সেড-এর মতো s/pattern/replacementসিনট্যাক্স উদাহরণ ব্যবহার করে প্রসারণের বিকল্পগুলি সম্পাদন করতে পারেন

somecommand path/to/foo.bar !#$:s/.bar/.baz

যাত্রা।

$ mv -v somepath/Original/Dir3/SubDir1/foo.bar !#$:s/.bar/.baz
mv -v somepath/Original/Dir3/SubDir1/foo.bar somepath/Original/Dir3/SubDir1/foo.baz
'somepath/Original/Dir3/SubDir1/foo.bar' -> 'somepath/Original/Dir3/SubDir1/foo.baz'

আপনি যদি নির্দিষ্টভাবে পথটি চান (উদাহরণস্বরূপ, mvসম্পূর্ণ আলাদা নামের কোনও ফাইল যা সহজেই প্রতিস্থাপনের দ্বারা প্রাপ্ত হয় না), আপনি এই hসংশোধকটি ব্যবহার করতে পারেন :

$ mv -v somepath/Original/Dir3/SubDir1/foo.baz !#$:h/baz.foo
mv -v somepath/Original/Dir3/SubDir1/foo.baz somepath/Original/Dir3/SubDir1/baz.foo
'somepath/Original/Dir3/SubDir1/foo.baz' -> 'somepath/Original/Dir3/SubDir1/baz.foo'

readlineশেষ আর্গুমেন্টটি ইয়ঙ্ক করার জন্য মূল সংমিশ্রণ সহ অন্যান্য বিকল্পগুলির জন্য , দেখুন ব্যাশ কনসোলে বর্তমানে প্যারামিটারে টাইপ করা পুনরায় কীভাবে করবেন?


2

আপনি চেষ্টা করতে পারেন:

pushd .
cd /really/long/directory/name/
mv whatever.1 whatever.2
popd

2

একটি পরিবর্তনশীল সহ

  1. ডিরেক্টরিটি ভেরিয়েবলে সংরক্ষণ করুন: `DIR=./really/long/path/
  2. ব্যবহার সরানো: mv "$DIR"foo.bar "$DIR"foo.bz

এক লাইনে: DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz


ডিরেক্টরি পরিবর্তন হচ্ছে

  1. আপনি cdযে ডিরেক্টরিতে কাজ করতে চান তা আপনিও করতে পারেন:cd ./really/long/path
  2. তারপরে ফাইলের নাম পরিবর্তন করুন: mv foo.bar foo.bz

এক লাইনে: cd ./really/long/path && mv foo.bar foo.bz


1
দ্বিতীয়টি পরিচিত ;-)
— zpletan

2
&&সর্বশেষ ওয়ান-লাইনারে সেরা ব্যবহার । অন্যথায়, যদি cdব্যর্থ mvহয় তবে সম্ভাব্যভাবে একটি ফাইল ওভাররাইট করে ভুল ডিরেক্টরিতে চালানো হবে। সাথে cd ./really/long/path && mv foo.bar foo.baz, mvকেবল তখনই চালিত হবে যদি cdডিরেক্টরি পরিবর্তন করতে সফল হয়।
— গিরিহা

-3

আপনি ডিরেক্টরিটির নাম সংক্ষিপ্ত করতে আপনার নাম কমান্ড করতে পারেন:

alias src='/directory/name/of/source'
alias dst='/directory/name/of/destination'
mv src dst

1
-1 alias test='/var/log' ; cd testদেয় -bash: cd: test: No such file or directory।
— zpletan
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.