ফাইল ফাইলের নাম পাঠাতে কীভাবে ভর পাঠাতে হয়?


44

আসুন বলুন যে আমার কাছে .mdফাইলের পূর্ণ একটি ডিরেক্টরি রয়েছে যার নাম দেওয়া বিভিন্ন জিনিস রয়েছে। বলুন আমি প্রতিটি ফাইলের নামের সামনে "পাঠ্য" প্রিপেন্ড করতে চেয়েছিলাম। সুতরাং উদাহরণস্বরূপ: ফাইল a.md, b.mdএবং c.mdহয়ে যাবে test - a.md, test - b.mdএবং test - c.md

কমান্ড লাইনের মাধ্যমে আমি কীভাবে এটি সম্পাদন করব?

উত্তর:


60

টার্মিনাল থেকে সহজেই টাইপ করা যায় এমন এক-লাইনার:

for f in *.md; do mv "$f" "test - $f"; done

অথবা সেমিকোলন ব্যবহারের পরিবর্তে পৃথক রেখায় পুনরায় লিখিত:

for f in *.md
do
    mv "$f" "test - $f"
done

উদ্ভাস

এর সিনট্যাক্স for(ইন sh):

for NAME [in WORDS ... ] ; do COMMANDS; done

এখানে, আমাদের NAMEহয় fএবং আমাদের WORDSবর্তমান ডিরেক্টরী ম্যাচিং সমস্ত ফাইল *.md। সুতরাং ভেরিয়েবলটি $fপ্রতিটি ফাইলের সাথে মিলে যাবে *.md

সুতরাং জন্য a.md:

mv "$f" "test - $f"

হয়ে

mv "a.md" "test - a.md"

উদ্ধৃতিগুলি গুরুত্বপূর্ণ কারণ প্রতিটি ফাইলের $fনামেই ফাঁকা স্থান থাকতে পারে। অন্যথায় mvপ্রতিটি শব্দ পৃথক ফাইল বলে মনে করবে। উদাহরণস্বরূপ, যদি কোনও উদ্ধৃতি না থাকে, এবং একটি ফাইল বলা হয় Foo Bar.md, এটি এটি অনুবাদ করবে:

mv Foo Bar.md test - Foo Bar.md

যা ইচ্ছাকৃতভাবে কাজ করবে না। তবে $fউদ্ধৃতিগুলিতে মোড়ক দিয়ে তা বোঝায়:

mv "Foo Bar.md" "test - Foo Bar.md"

এর বাক্য গঠনটি উল্লেখ করে for, আপনি *.mdপ্রতিটি ফাইলের একটি নির্দিষ্ট করে নাম উল্লেখ করে একটি উপসেটটির নাম পরিবর্তন করতে পারেন :

for f in a.md b.md d.md; do mv "$f" "Test - $f"; done

বা শেল প্রসার ব্যবহার করে:

for f in {a,b,d}.md; do mv "$f" "Test - $f"; done

এটাই আমার দেখার দরকার ছিল। ধন্যবাদ!
রায়ান

11

আপনি যদি prename...

prename 's/^/test - /' *.md

সাধারণ শেল কমান্ড ব্যবহার করে:

for file in *.md; do
    mv "$file" "test - $file"
done

আমি কীভাবে পাব prename?
গা

আমার কাছে উবুন্টু 16.04 এলটিএসে প্রিইনস্টল করা আছে বলে মনে হচ্ছে। আপনি কি নিজের প্যাকেজ পরিচালককে পরীক্ষা করেছেন (যেমন sudo apt-get install?)?
অরিওন 751

5

mmv1 , 2 এই জাতীয় কাজের জন্য খুব সুন্দর একটি সরঞ্জাম, বর্তমান কাজের ক্ষেত্রে প্রয়োগ করা হয়েছে, এটি হবে

mmv '*.md' 'test - #1.md'

অবশ্যই, আপনি যদি কেবলমাত্র a.md, b.md এবং c.md তে "পরীক্ষা -" যুক্ত করতে চান তবে a1.md নয়

mmv '?.md' 'test - #1.md'

আরও উপযুক্ত হবে।

আমি সত্যিই এটির পরামর্শ দিতে পারি, বিশেষত যদি আপনার এ জাতীয় অনেক সমস্যা থাকে।

আপনি যদি অতিরিক্তভাবে কোনও গ্রাফিকাল ইন্টারফেসের সন্ধান করেন তবে gprename ব্যবহার করে দেখুন


5

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

find . -maxdepth 1 -type f -name '*.md' | while read -r file; do
    file=$(basename $file)
    mv "$file" "test - $file"
done

"বেসনাম" লাইনটি সেখানে রয়েছে যাতে এটি কেবল ফাইলের নামটিই মুদ্রণ করতে পারে - এমন কোনও পথের উপাদান ছাড়াই যা পুনরায় নামকরণের কাজটি বিরতি দেয়।


2

আমি জানি এটি সত্যিই দেরি হয়ে গেছে, তবে অন্য কেউ যদি এরকম কিছু সন্ধান করে তবে এটি আমার পক্ষে কাজ করেছে:

rename '' 'name -' *.md

1
সরল এবং সোজা-এগিয়ে
ব্যবহারকারী 13743

0

আপনার যদি zshউপলব্ধ থাকে তবে আপনি এটি ব্যবহার করতে পারেন zmv:

autoload zmv
zmv -w '*' 'test - $1'

আপনি কমান্ডটি পরীক্ষা করে দেখতে পারেন:

zmv -wn '*' 'test - $1'
  • -n এর অর্থ শুকনো রান, অর্থাত্ কী হবে তা কেবল দেখান।
  • -w স্পষ্টতই ওয়াইল্ডকার্ডের চারপাশে প্রথম বন্ধনী রাখে, ব্যাক-রেফারেন্সগুলি কাজ করে।

0

ব্যাশে, ফোল্ডারের সমস্ত ফাইলে "পাঠ্য প্রিপেন্ড করুন -" যুক্ত করা:

for i in *; do mv "$i" "$(echo $i | sed 's/^/Prepend\ text\ \-\ /')"; done;

এটি লেখার একটি দীর্ঘ-দীর্ঘ উপায়for i in *; do mv "$i$" "Prepend text - $i"; done
ডেভিড রিচার্বি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.