বাশ-এ ফাইলের অক্ষরগুলি কীভাবে সরিয়ে ফেলবেন?


13

নীচের মতো আমার কাছে একগুচ্ছ মিডিয়া ফাইল রয়েছে:

tvshow.s01e11]Bloodlines.avi
tvshow.s01e12]suffer.avi
tvshow.s01e13]NotMe.avi

আমি তাদের নাম পরিবর্তন করতে চাই

tvshow.s01e11.avi
tvshow.s01e12.avi
tvshow.s01e13.avi

আমি নামটি ব্যবহার করার চেষ্টা করেছি তবে স্পষ্টতই আমি বাক্য গঠন সঠিকভাবে পাচ্ছি না কারণ এটি ব্যর্থ হয়।


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

উত্তর:


9

এটি ফাইলগুলির নাম পরিবর্তন করবে। যে কোনও সংখ্যক বর্ণানুক্রমিক অক্ষর বোঝাতে আপনার \ ডাব্লু * প্রয়োজন।

rename 's/\]\w*//' *

তথ্যসূত্র: http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#UsingSimpleWildcards


5
নোট করুন যে এর জন্য পার্ল renameইউটিলিটি প্রয়োজন , ইউজার-লিনাক্স থেকে একই নাম নেই । দেখুন এখানে এবং এখানে
ilkkachu

14

শেল ইন, এক সহজভাবে করতে পারে:

for x in *]*.avi ; do 
    mv -i "$x" "${x%]*.avi}.avi"
done

শেলটি কেবলমাত্র একটি নিয়মিত গ্লোব দিয়ে ফাইলের নামের তালিকা তৈরি করতে পারে ${var%pattern}এবং স্ট্রিংয়ের শেষে থেকে চলকের মধ্যে (সংক্ষিপ্ততম) মিলের প্যাটার্নটি সরিয়ে দেয় var। যেহেতু চূড়ান্ত এক্সটেনশানটি সর্বদা থাকে তাই .aviআমি এটি কেবল প্যাটার্ন দিয়ে সরিয়ে এটিকে আবার যুক্ত করি। উদ্ধৃতিগুলির সাথে, স্থানগুলির মতো ফাইলের নামের সাথে এটিও কাজ করা উচিত likeFancy Name for a Show.s01e01]Asdf.avi


@ নভিসি এক্সট্রাগ্লোব প্যাটার্নটি কোনও খারাপ ধারণা ছিল না। আসলে, এর মতো কিছু করা ${x/]*([^.])}উচিত, এটি একটি বন্ধনী এবং যে কোনও সংখ্যক নন-ডটস সরিয়ে দেয়। (যদিও অন্য বন্ধনী বা বিন্দু আছে যদি তা ব্যর্থ হয়, যেহেতু এটি স্ট্রিংয়ের শেষে লক করা হয়নি)
ইলক্কাচু

এটা একটা ভাল দিক. আমি যখন সত্যিই সমস্যার সাথে জড়িত ছিলাম তখন যখন আমার সাথে যাওয়া উচিত ছিল ${x/]*.avi}এবং .aviআপনার মতো একটি যুক্ত করা উচিত । তবে নামের জায়গাগুলি কীভাবে ভাঙবে সে সম্পর্কে আমিও অসন্তুষ্ট ছিলাম (`find . -name '*]*.avi'`)। নাম সীমাবদ্ধ না হওয়ায় আমি একটি সীমিত মানক ইউনিক্স কমান্ড পদ্ধতি সরবরাহ করতে পেরে খুশি হয়েছিলাম, তবে এটি আমার বাইরে চলে যায়।
নভেসি সি

2

এটি সব ধরণের অবৈজ্ঞানিক - অন্যান্য উত্তরগুলি আরও দ্রুত এবং খাটো - তবে ...

আপনি পাওয়ারশেল ব্যবহার করতে পারেন! মাইক্রোসফ্ট সম্প্রতি এটিকে ওপেন সোর্স করেছে এবং এটি ক্রস প্ল্যাটফর্ম করেছে। আপনার ওএসের জন্য ডাউনলোডগুলি এবং ইনস্টলেশন নির্দেশিকার জন্য "পাওয়ারশেল পান" বিভাগটি দেখুন

এটি ইনস্টল হয়ে গেলে আপনি এই সংক্ষিপ্ত স্ক্রিপ্টটি ব্যবহার করতে পারেন:

Get-ChildItem -File '*]*.avi' | ForEach-Object {
    Rename-Item $_ -NewName (($_.Name -Split ']')[0] + '.avi')
}

মূলত, এটি বর্তমান ডিরেক্টরিটি প্রতিটি ফাইলের মধ্যে যায় যা একটি ফাইলের মিল রয়েছে *]*.avi, বন্ধুর আগে অংশটি পায়, এটি .aviআবার ফিরে আসে এবং নতুন নাম হিসাবে সেট করে।

এটিকে সরাসরি বাশ থেকে চালাতে, এই আধা-গল্ফযুক্ত ওয়ান-লাইনার ব্যবহার করুন:

powershell -command $'gci -File \'*]*.avi\'|%{rename-item $_ -NewName (($_.Name -Split \']\')[0]+\'.avi\')}'

এই স্ট্যাক ওভারফ্লো উত্তরের সৌজন্যে উদ্ধৃতিটি

(উইন্ডোতে উবুন্টু-তে বাশ-এ পরীক্ষিত Power পাওয়ারশেলের সাহায্যে এটি করার খুব সম্ভবত একটি ছোট উপায় আছে, তবে আমি এমন কিছু দেখাতে চেয়েছিলাম যা নিয়মিত অভিব্যক্তি জানে না তাদের কাছে বোধগম্য)


রুবে গোল্ডবার্গ গর্বিত হবে! রেজেক্সেস শিখার জন্য সত্যিকারের পিআইটিএ, তবে তারা এটির বহুগুণ মূল্যবান - এমনকি প্রাথমিক স্তরেও আমি এগুলি ব্যবহার করতে সক্ষম হয়েছি।
জো

1

ডেবিয়ানের এমএমভি নামে একটি প্যাকেজ রয়েছে যা অন্যান্য ডিস্ট্রোতেও উপলভ্য হতে পারে এবং যদি না হয় তবে উত্স থেকে সংকলন করার জন্য যথেষ্ট সহজ হওয়া উচিত। এটি আপনাকে এটি লিখতে দেয়:

mmv '*]*.avi' '#1.avi'

আপনি আরও তথ্যের জন্য এই আদেশের জন্য উবুন্টু ম্যান পৃষ্ঠাটি পড়তে পারেন ।


0

এটি প্যাটার্নটি অনুসন্ধান করবে এবং সেড ব্যবহার করে পাঠ্যটি প্রতিস্থাপন করবে।

 $sed 's/\(.*]\)[a-zA-z0-9].*\(.avi\)/\1\2/' filename
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.