ফাইলের নাম কাটা হচ্ছে


1

আমি ফাইলের নামগুলি শেষ 4 টি সংখ্যায় কেটে দেওয়ার চেষ্টা করছি (উদাহরণস্বরূপ: 941_S_5193 হয়ে 5193 হয়ে উঠুন)। মোটামুটি 600 টি ফাইলের জন্য এই কমান্ডটি লুপ করার সবচেয়ে সহজ উপায় কী হবে?

ধন্যবাদ. -KM


আপনি কীভাবে সম্পর্কিত ফাইলগুলির তালিকা পাবেন?
cmak.fr

তারা আমার ডেস্কটপে অবস্থিত অংশগ্রহণকারী ফাইলগুলির একটি সিরিজে বাসা বেঁধেছে। উদাহরণ: / ব্যবহারকারী / ডেস্কটপ / কিমি / নিউরোআইমেজ / স্ট্রাক্ট / 941_S_5193।
klmpc

আমার এটি আছে:find /users/desktop/km/neuroimage/struct/ -type f -iname '[[:digit:]]*_[[:alpha:]]_*' -exec rename 's/[[:digit:]]*_[[:alpha:]]_//' {} \;
জর্জ উদোসেন

নামগুলির জন্য ফর্ম্যাটটি জিজ্ঞাসা করি "3 সংখ্যা_ বর্ণমালার_সংখ্যার চারটি সংখ্যা" এর মতোই, যদি আমার দেওয়া কোডটি সাহায্য করা উচিত
জর্জ উদোসেন

1
কেবলমাত্র একটি অনুস্মারক, পুনরায় নামকরণের সময় যে ফাইল ফাইলগুলির সংঘর্ষ ঘটতে পারে সে সম্পর্কে সাবধান থাকুন, যেমন `941_S_5193` এবং` 941_P_5193 both উভয় একই শেষ 4 এ ছাঁটাই হবে 5193
সের্গেই কোলোডিয়াযনি

উত্তর:


2

renameকমান্ড যে যথেষ্ট ভাল করতে পারেন:

# Note, -n flag used for testing only, remove for actual renaming
$ ls
941_P_5191  941_P_5192  941_P_5193  941_P_5194
$ rename -n 's/^(.*)_([0-9]{4})$/$2/'  ./*
./941_P_5191 renamed as 5191
./941_P_5192 renamed as 5192
./941_P_5193 renamed as 5193
./941_P_5194 renamed as 5194

আপনি forলুপের মধ্যে ব্যাশ এবং এমভিতে উপসর্গ অপসারণ করতে পারেন :

$ for f in ./*; do echo mv "$f" "${f##*_}"; done
mv ./941_P_5191 5191
mv ./941_P_5192 5192
mv ./941_P_5193 5193
mv ./941_P_5194 5194

দ্রষ্টব্য: echoআসল নামকরণের জন্য স্থানান্তর করুন remove


1
এফওয়াইআই "কাটানো" আমি সর্বদা কোনও কিছুর শেষ অপসারণের সাথে সমান হয়েছি। সুতরাং আমি পরীক্ষা করেছিলাম এবং
শুরুটি

@ WinEunuuchs2 ইউনিক্স আকর্ষণীয়, "ক্লিপিং" শুরুর দিক থেকে কিছু সরানোর জন্য কখনও ব্যবহার করা শোনেনি, তবে শিখতে ভালো লাগছে! আমি মনে করি "ট্রিম "
টিও

@ WinEunuuchs2 ইউনিক্স ভাগ করে নেওয়ার জন্য আপনাকে ধন্যবাদ! আমি কখনই জানতাম না যে ছাঁটাই কেবল শেষটি সরিয়ে ফেলছে, তবে আমি অনুমান করি যে এটি উপলব্ধি করে।
klmpc

0

আমি ls | tail -c 5প্রতিটি ফাইলের শেষ 4 টি সংখ্যা তালিকাভুক্ত করে ডিরেক্টরিতে থাকা আইটেমগুলির মধ্য দিয়ে একটি লুপের পরামর্শ দিতাম ।


2
আমার শেষ 4 টি সংখ্যা না দেখে স্থায়ীভাবে ফাইলটির নাম পরিবর্তন করতে সক্ষম হওয়া দরকার। এছাড়াও, সমস্ত শেষ বিভাগগুলি 5 দিয়ে শুরু হয় না, তাই প্রতিটি শুরুর অঙ্ক নির্দিষ্ট করে দেওয়া একটু কম স্ট্রিমলাইজ হবে।
klmpc

0

আপনি 941_S_5193একটি ফাইলের নাম দিয়েছেন , তবে আরও কয়েকটি সহায়ক হবে। আমি এই findকমান্ডটি তৈরি করেছিলাম যা এটি নমুনা ফাইল নামে কাজ করেছে 941_S_5193:

find /users/desktop/km/neuroimage/struct/ -type f -iname '[[:digit:]]*_[[:alpha:]]_*' -exec rename -n 's/[[:digit:]]*_[[:alpha:]]_//' {} \;

নমুনা ফাইলের নাম:

941_S_5194
923_D_5234
941_S_5193
941_S_5134
941_A_0034
941_C_9034

এই আদেশটি ব্যবহার করে:

find /users/desktop/km/neuroimage/struct/ -type f -iname  '[[:digit:]]*_[[:alpha:]]_*' -exec rename -n 's/[[:digit:]]*_[[:alpha:]]_//' {} \;

ফাইলনেমে এই পরিবর্তনগুলি উত্পাদন করে:

rename(./941_S_5194, ./5194)
rename(./923_D_5234, ./5234)
rename(./941_S_5193, ./5193)
rename(./941_S_5134, ./5134)
rename(./941_A_0034, ./0034)
rename(./941_C_9034, ./9034)

ফলাফল:

0034
5134
5193
5194
5234
9034

দ্রষ্টব্য: পুনর্নবীকরণ কমান্ডে '-n' বিকল্পটি ব্যবহার করা আপনাকে আসল নামকরণের সাথে এগিয়ে যাওয়ার আগে কী নাম পরিবর্তন করে তা দেখতে দেয়। আপনি যখন এই ফাইলগুলির নাম পরিবর্তন করতে প্রস্তুত তখন সেই বিকল্পটি সরান।

কমান্ডটির পুরোপুরি প্রশংসা করার পদক্ষেপগুলি হ'ল:

  1. find /users/desktop/km/neuroimage/struct/ -type f -iname '[[:digit:]]*_[[:alpha:]]_*'যে ফাইলগুলি পরিবর্তন করা হবে তা সন্ধান করতে প্রথমে এটি ব্যবহার করুন ,
  2. যদি পদক্ষেপগুলি (1)ব্যর্থ হয় তবে regexফাইল ফাইলের সাথে মেলে না, রেগিক্সটি সাম্রাজ্য করে আপনার প্রশ্নটি আপডেট করে, অন্যথায়
  3. যখন এটি প্রত্যাশা অনুযায়ী আসে এখন -exec rename -n 's/[[:digit:]]*_[[:alpha:]]_//' {} \;কমান্ডটি পদক্ষেপে (1) অংশ যুক্ত করুন , সুতরাং এটি আপনাকে নাম পরিবর্তন করে কী হবে তা সন্ধান করে এবং দেখায়।

    find /users/desktop/km/neuroimage/struct/ -type f -iname '[[:digit:]]*_[[:alpha:]]_*' -exec rename -n 's/[[:digit:]]*_[[:alpha:]]_//' {} \;

  4. কাজটি শেষ হয়ে গেলে -nএই ফাইলগুলিকে পুনরায় নামকরণের বিকল্পটি সরান । তাই ভালো:

    • find /users/desktop/km/neuroimage/struct/ -type f -iname '[[:digit:]]*_[[:alpha:]]_*' -exec rename -n 's/[[:digit:]]*_[[:alpha:]]_//' {} \;

যে সমস্ত নমুনা ফাইল আপনি তালিকাভুক্ত করেছেন সেগুলি সঠিক কাঠামো অনুসরণ করে (যেমন 941_S_5193, 928_F_3678 ইত্যাদি যার যার নিজস্ব অনন্য ফাইল উপস্থাপন করে)। যাইহোক, আমি চালাতে কমান্ড পেতে সক্ষম হইনি। কোনও ত্রুটি আসেনি তাই আমি কোন অংশটি কাজ করছে না তা পুরোপুরি নিশ্চিত নই, তবে আমি কী সামনে আসতে পারি তা দেখার জন্য আরও কয়েকবার টুইট করার চেষ্টা করব। (আপনাকে ধন্যবাদ,
বিটিডাব্লু

ডিআইডি আপনি -nবিকল্পটি ব্যবহার করেন ?
জর্জ উদোসেন

প্রথমে find /users/desktop/km/neuroimage/struct/ -type f -inameএটি পরিবর্তন করা হবে এমন ফাইলগুলি সন্ধান করতে এটি ব্যবহার করুন , তারপরে এটি প্রত্যাশার হিসাবে উঠে এলে এটি যুক্ত করুন -exec rename -n 's/[[:digit:]]*_[[:alpha:]]_//' {} \;যাতে এটি সন্ধান করে এবং কী নাম পরিবর্তন হয় তা আপনাকে দেখায়। কাজটি শেষ হয়ে গেলে -nএই ফাইলগুলিকে পুনরায় নামকরণের বিকল্পটি সরান ।
জর্জ উদোসেন

আমি -n কমান্ডের সাথে এবং ছাড়া এটি ব্যবহার করার চেষ্টা করেছি। এখনও ভাগ্য নেই।
klmpc

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