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


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.