ডিরেক্টরি পাথ পুনরায় টাইপ না করে ফাইলগুলির নামকরণের দ্রুততম উপায়


56

আমি জানি কীভাবে ইউনিক্সে ফাইলগুলির নাম পরিবর্তন করতে হবে:

$ mv ~/folder/subfolder/file.txt ~/folder/subfolder/file.sh

     ^-------this part------^    ^------this part-------^

~/folder/subfolder/fileদু'বার পুনরাবৃত্তি করতে এটি খুব দীর্ঘ সময় নেয় ।

আরও কি দ্রুত উপায় আছে?

উত্তর:


104

আপনার শেল তাহলে সমর্থিত বন্ধনী সম্প্রসারণ (সাথে কাজ করে csh, tcsh, ksh, zsh, bash, mksh, lksh, pdksh, yashসঙ্গে বক্রবন্ধনী-প্রসারিত কল করে সক্রিয় yash --brace-expandবা interative শেল মধ্যে সেট set -o brace-expand, অথবা fish):

mv ~/folder/subfolder/file.{txt,sh}

4
সরলতাই সর্বোত্তম!
ব্রায়াম

2
শেল উজ্জ্বল মধ্যে বিস্তারের দুর্দান্ত ব্যবহার!
harish.venkat

3
এটা তোলে হয় সন্ত্রস্ত, কিন্তু সত্যিই রহস্যপূর্ণ। এটি কাজ করে তবে প্রথম নজরে আমার মনে হবে এটি কিছু আলাদা করে: দুটি ফাইল কোথাও সরিয়ে দেয়। আমি এটি একটি দুর্দান্ত ধারণা বলে মনে করি না, বিশেষত যেহেতু আরও অনেক ভাল সমাধান ব্যবহার করা হচ্ছে rename
yo '

4
@ তোহেজ: কেন এটি গুপ্ত? এটি শেলের একটি বৈশিষ্ট্য এবং শেল ম্যান পৃষ্ঠাটি পড়ার মাধ্যমে প্রত্যেকে এটি জানতে পারে। এবং আমি এর renameচেয়ে ভাল সমাধান বলে মনে করি না কারণ renameআপনাকে কখনই বিদ্যমান ফাইলটিকে ওভাররাইড করতে বলবে না বা না।
cuonglm

1
@ জ্ঞাক আপনি মানুষ।
সূচনা

20

আপনি ব্যবহার করতে পারেন rename( ইউজ -লিনাক্স প্যাকেজের অংশ)।

rename .txt .sh ~/folder/subfolder/file.txt

দেখুন পুনঃনামকরণ man পৃষ্ঠা আরো বিস্তারিত জানার জন্য।


+1 এটি কীভাবে করবেন তা স্পষ্ট উপায়, শাঁসের {a,b}কার্যকারিতার উপর নির্ভর করার চেয়ে অনেক ভাল ।
yo '

5
কিছু লিনাক্সের ডিস্ট্রোজে (যেমন উবুন্টু), renameসম্পূর্ণ আলাদা, পার্ল-ভিত্তিক প্রোগ্রাম। সেখানে, আপনি ব্যবহার করবে rename 's/txt$/sh/' ~/folder/subfolder/file.txt
অশুচিপ

দেবিয়ান (এবং উবুন্টু) তেও আছে mmv
ctrl-alt-delor

10

উপরের সমস্ত ভাল। এটিও কাজ করবে:

( cd ~/folder/subfolder && mv file.txt file.sh )

না এটা আমার কাজ করে না!
হামেদ কামরাভা

আপনি sudoঅংশটি সরিয়ে ফেললে এটি কাজ করবে ।
চথুলহু

1
@ চথুলহু হ্যাঁ আপনার অধিকার তবে কেন কাজ করে না sudo?
হামেদ কামরাভা ২

2
@ হামেদকামরভা সম্ভবত কারণ sudoএটি এর সাথে ~মূলের হোম ডিরেক্টরি হিসাবে ব্যাখ্যা করে।
চথুলহু

আপনি , কিন্তু না । কেন সিডি শেল সালে নির্মিত হয় এবং আপনি যা করতে পারেন না।sudomvcdsudo(
Ctrl-Alt-delor

6

না। ফাইলটির নতুন নামকরণের জন্য আপনার পুরো পথটি দেওয়া দরকার। একমাত্র বিকল্প হ'ল চালানোর আগে লক্ষ্য ফোল্ডারে চলে যাওয়া mv:

cd ~/folder/subfolder/
mv file.txt file.sh

বিকল্পভাবে, আপনি একটি ছোট ফাংশন লিখতে পারেন যা লক্ষ্য ডিরেক্টরিতে ফাইলটির নাম পরিবর্তন করে। উদাহরণস্বরূপ, আপনার শেল প্রারম্ভিকরণ ফাইলটিতে এই লাইনগুলি যুক্ত করুন ( ~/.bashrcযদি আপনি ব্যবহার করছেন bash):

lmv(){
    _path=$(dirname -- "$1")
    _target="${_path%/}/$2"
    mv -- "$1" "$_target"
}

তারপরে, একটি নতুন টার্মিনাল খুলুন বা কেবল source ~/.bashrcফাইলটি পুনরায় পড়ার জন্য চালান এবং আপনি এটি করতে পারেন:

lmv ~/folder/subfolder/file.txt file.sh

lmv()ফাংশন জন্য +1 । আমি তা জানতাম না :)
হামেদ কামরাভা

1
@ হামেদ কামরাভা এটি কেউ জানত না। আমি কেবল এটি লিখেছি, এটি কোনও স্ট্যান্ডার্ড নয়।
টেরডন

2
আমি জানি. মানে আমি জানতাম না আমি নিজের ফাংশন লিখতে পারি!
হামেদ কামরাভা ২

2

কেবল কিউংলমের উত্তরের কার্যকারিতা প্রসারিত করার জন্য (আমি তার সমাধানটি পছন্দ করি বলে কোনও creditণ গ্রহণ করা উচিত নয়) এবং তার উত্তরটি সঠিক।

ব্যবহারের ক্ষেত্রে হ'ল আমরা প্রায়শই একটি দূরবর্তী অবস্থানের (আসল সমস্যা) কোনও ফাইল এমভি করতে চাই, যেমন /folder/subfolder/configFile.dat to configFile.dat.orig

কমান্ডের এই ফর্মটি একটি ফাইল এক্সটেনশন যুক্ত করে (মূল এক্সটেনশনটি প্রতিস্থাপন করে না)

mv ~/folder/subfolder/file.txt{,.orig}

বর্ণিত: "or, .orig}" এর অর্থ ফাইলের নামের শেষে (কিছু না) ".orig" দিয়ে প্রতিস্থাপন (কিছুই নয়) "

বা ফাইল এক্সটেনশন অপসারণ করতে (পুনরায় নামটি বিপরীতে)

mv ~/folder/subfolder/file.txt{.orig,}

দ্রষ্টব্য: "দির পাথটি পুনরায় টাইপ না করে ফাইলগুলির নামকরণের দ্রুততম উপায়" এর জন্য এখনও বিষয় রয়েছে


1

হ্যাঁ. আপনি ব্যবহার করেন তাহলে bash, আপনি কি sudo pushd ~/folder/subfolder/ && sudo mv ./file.txt ./file.sh && popd

যা প্রকৃতপক্ষে বড় এবং আপনি যখন এটি করেছিলেন তখন আপনি যদি মূল ডিরেক্টরিটিতে অ্যাক্সেসের অনুমতি হারিয়ে ফেলেন তবে ব্যর্থ হতে পারে popd


1
মানেটা কি এমন pushdএবং popdএখানে? এর চেয়ে ভাল কীভাবে cd ~/folder/subfolder/ && sudo mv file.txt file.sh?
টেরডন

1
মুল বক্তব্যটি হ'ল, আপনি যে ফোল্ডারটি শুরু করেছিলেন তাতে ফিরে আসার পরে কোনও সাবফোল্ডার নয় f বিকল্প pushd popdহিসাবে ব্যবহার cdএবং ফিরে যেতে হয় cd -
জোফেল

প্রশ্নকারীর মনে হয়েছিল যে কাজটি ডিরেক্টরিটি পরিবর্তন না করার একটি উদ্দেশ্য বলেছিলেন এবং যখন পাওয়া যায় তখন popdতার চেয়ে ভাল cd ../../
41754

7
(cd /path/to/there && mv x y)তারপরে (সাবসেলের সাথে) ব্যবহার করুন
স্টাফেন চেজেলাস

আপনি সত্যিই sudoআগে রাখা উচিত নয় pushd। সুতরাং সম্পূর্ণ কমান্ড হওয়া উচিত pushd ...dir && sudo mv old new && popd। বিকল্প হিসাবে, একটি করতে পারে (cd ...dir; sudo mv old new)কারণ সাবশেলে চালানো স্বয়ংক্রিয়ভাবে ডিরেক্টরি পরিবর্তনের যত্ন নেবে।
মিক্কো রেন্টালাইনেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.