স্থানীয় ফোল্ডারে একটি উপসর্গ বা প্রত্যয় যুক্ত করে ফাইলগুলির নাম পরিবর্তন করুন


12

আমার একটি ফোল্ডারে অনেকগুলি ফাইল রয়েছে এবং আমি সেগুলিতে উপসর্গ বা প্রত্যয় ( উভয় নয় ) যুক্ত করতে চাই। আমি এখানে যাচাই করে দেখেছি যে আমি ব্যবহার করতে পারি can

for filename in *.jpg; do mv "$filename" "prefix_$filename"; done;

শেষ হওয়া সমস্ত ফাইলগুলিতে একটি উপসর্গ যুক্ত করতে .jpg(এবং যদি আমি এটি সরিয়ে ফেলি .jpgতবে এটি বর্তমান ফোল্ডারের সমস্ত ফাইলে উপসর্গ যুক্ত করবে)।

তবে, আমি সক্ষম হতে চাই

  • একটি সূফী যুক্ত করুন (যা এর পুনরায় নামকরণ filename.extকরুন filename.whatever.ext),
  • উপসর্গ বা প্রত্যয় ইতিমধ্যে উপস্থিত আছে কিনা তা পরীক্ষা করে দেখুন এবং পরে এড়িয়ে যান,
  • এমন একটি উপাধি তৈরি করুন যা যেমন addprefix whatever *.extবা হিসাবে আর্গুমেন্ট গ্রহণ করেaddsufix whatever *.*

উত্তর:


10

আপনি ব্যবহার করেন, তাহলে bash, তারপর এই এক-লাইনের এটা আপনার জন্য কি করতে পারেন (অভিমানী আপনি ভেরিয়েবল আছে $prefix, $suffixএবং $extensionনির্দ্ধিধায় উপলব্ধ)

mv "$filename" "$prefix${filename%.$extension}$suffix.$extension"

আপনার স্ক্রিপ্টগুলি এমন হতে পারে

#!/bin/bash
# Usage: addprefix <prefix> <files>

prefix=$1
shift
for f in "$@"
do
  mv "$f" "$prefix$f"
done

এবং

#!/bin/bash
# addsuffix <suffix> <files>

suffix=$1
shift
for f in "$@"
do
  extension=${f##*.}
  if [ -z $extension ]; then
    mv "$f" "$f$suffix"
  else
    mv "$f" "${f%.$extension}$suffix.$extension"
  fi
done

এটি প্রায় নিখুঁত! এটি (1) উপসর্গ বা প্রত্যয় ইতিমধ্যে উপস্থিত (এবং তারপরে এড়িয়ে গেছে) এবং (2) কোনও এক্সটেনশন ছাড়াই ফাইলগুলিতে কাজ করে কিনা তা পরীক্ষা করে নিখুঁত হবে। এত বিরক্ত করার জন্য দুঃখিত ...
ব্রাজিলিয়ান গাই

(1) এর জন্য আপনি (আমার মনে হয়, পরীক্ষা করা হয়নি) এমভি কে মোড়কে উপসর্গের চেক যোগ if [ $f == $prefix* ]করতে পারেন এবং আপনি if [ $f == *$suffix$([ ! -z $extension ] && echo -n '.')$extension ]অ্যাডুফিক্সে কয়েক এমভি কমান্ডের সাথে প্রত্যয়টি পরিবর্তন করতে পারেন । (2) এর জন্য এটি ইতিমধ্যে কোনও প্রসার ছাড়াই এমন ফাইলগুলিতে কাজ করা উচিত, যদি না আমি কোনও ভয়ঙ্কর প্রোগ্রামার না হয়ে।
হারুন ওকানো

7

এখানে একটি পার্ল renameকমান্ড রয়েছে যাতে কৌশলটি করা উচিত। যদিও সাবধান থাকুন: বেশ কয়েকটি পৃথক কমান্ড ডেকে আনা হয়েছে rename, সুতরাং নিশ্চিত হয়ে নিন যে আপনি পার্ল স্ক্রিপ্ট পেয়েছেন যা perlexprএটির আর্গুমেন্ট হিসাবে প্রত্যাশা করে । এটি দেবিয়ান এবং ডেরিভেটিভস (উবুন্টু, পুদিনা,…) এর উপর প্যাকেজ renameদ্বারা সরবরাহ করা কমান্ড perl, তবে অন্য বিতরণগুলিতে নয় যা ডেকে আলাদা উপযোগী হতে পারে rename

martin@martin ~/test % touch a.txt
martin@martin ~/test % touch b.txt
martin@martin ~/test % rename 's/^(prefix)?/prefix/' *.txt
martin@martin ~/test % ll
insgesamt 0
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixa.txt
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixb.txt
martin@martin ~/test % rename 's/^(prefix)?/prefix/' *.txt
martin@martin ~/test % ll
insgesamt 0
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixa.txt
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixb.txt

আপনি দেখতে পাচ্ছেন, এটি আদর্শবান - আপনি যখন একাধিকবার ফোন করবেন তখন এটি উপসর্গটি আর যুক্ত করবে না।

এটি স্ট্রিংগুলির (শূন্য-দৈর্ঘ্য) শুরু ( ^) বা orচ্ছিক prefixস্ট্রিংয়ের সাহায্যে স্টার্টটি প্রতিস্থাপন করে কাজ করে prefix

আমি এটি শেল স্ক্রিপ্ট বা একটি শেল ফাংশন আপনার জন্য অনুশীলন হিসাবে একটি এনক্যাপসুলেটিং ছেড়ে যাব :)

পোস্টফিক্স যদিও কিছুটা শক্ত, কারণ আপনি ফাইলনামটির কোন অংশটি এক্সটেনশনকে গঠন করে তা নির্ধারণ করতে হবে ...


এটি একটি দুর্দান্ত উত্তর, তবে আমি আরও সার্বজনীন কিছু খুঁজছিলাম; এই উত্তরের জন্য আপনার পার্ল এবং এই নির্দিষ্ট (বা সমমান) উভয়ই renameউপস্থিত থাকতে হবে। এবং আমি জানি যে প্রত্যয়গুলি কিছুটা শক্ত, এটি লিঙ্কযুক্ত প্রশ্নে আচ্ছাদিত হয়নি, এবং আমি লিনাক্স, ব্যাশ, শেল স্ক্রিপ্ট, পার্ল এবং নিয়মিত অভিব্যক্তির একজন শিক্ষানবিশ, সুতরাং "কিছুটা শক্ত" আমার পক্ষে বেশ শক্ত ! :)
ব্রাজিলিয়ান গায়


1

বর্তমান ফোল্ডারে সমস্ত চিত্রের উপসর্গ এবং এক্সটেনশন পরিবর্তন করার সহজ উদাহরণ।

prefix=EG_
extension=.jpg
for i in $(ls); do mv $i "$prefix${i%.JPG}$extension";  done

আপনি যদি এটি পরীক্ষা করে দেখতে চান যে এটি পরিবর্তন করার আগে এটি আপনার ডেটাতে কীভাবে প্রভাব ফেলবে তবে এমভি প্রতিস্থাপনের দ্বারা প্রতিধ্বনির মাধ্যমে

IMG_7993.JPG এর জন্য আউটপুট হ'ল EG_IMG_7993.jpg

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.