বারে বারে ফাইল এক্সটেনশান পরিবর্তন করুন


87

আমি একটি ডিরেক্টরির মাধ্যমে পুনরুক্তি recursively এবং একটি নির্দিষ্ট এক্সটেনশন সমস্ত ফাইল সম্প্রসারণ পরিবর্তন করতে চান, বলে .t1যাও .t2। এটি করার জন্য বাশ আদেশ কী?


14
imho এটি একটি সদৃশ প্রশ্ন নয় - অন্য প্রশ্নটি পুনরাবৃত্তিযোগ্য নয়
চমত্কার লিনাক্স ব্যবহারকারী


@ অমলআনটনি: আপনার যদি না থাকে তবে renameএকটি শেল স্ক্রিপ্ট লিখুন, যা একটি একক ফাইলের নাম পরিবর্তন করে (আপনার সাধারণ ক্ষেত্রে করণীয় তুচ্ছ) এবং তারপরে findআপত্তিজনক এক্সটেনশন সহ সমস্ত ফাইলগুলিতে এই স্ক্রিপ্টটি প্রয়োগ করতে ব্যবহার করুন ।
ব্যবহারকারী 1934428

উত্তর:


208

আপনার যদি নতুন নাম উপলব্ধ থাকে তবে ব্যবহার করুন:

find . -name "*.t1" -exec rename 's/\.t1$/.t2/' '{}' +

অথবা:

find . -name '*.t1' -exec rename .t1 .t2 {} +

যদি নামটি উপলব্ধ না হয় তবে ব্যবহার করুন:

find . -name "*.t1" -exec bash -c 'mv "$1" "${1%.t1}".t2' - '{}' +

20
find . -name '*.t1' -exec rename .t1 .t2 {} +
অ্যারন ব্লেনকুশ

4
(আমার সংস্করণ renamesed শৈলী প্রতিকল্পন অভিব্যক্তি অনুমতি দেয় না অতি প্রেম লিনাক্স আমি ভালো উপাদান কি Windows এর জন্য TotalCommander ইনস্টল করতে হবে করতেন।।।)
হারুন Blenkush

6
যদি কেউ "${1%.t1}".t2অংশটি কী করে তা ভাবছে , যেমন আমি করেছিলাম: এটি নীচের কাজগুলিতে ব্যাশ স্ট্রিং ম্যানিপুলেশন ব্যবহার করে: 1 / প্রথম অবস্থানগত প্যারামিটার নিন $1এবং .t1তার শেষ (শতাংশ শতাংশ সাইন %অপারেটর) থেকে স্ট্রিংটি আক্ষরিকভাবে কেটে দিন । 2 / .t2ফলাফল স্ট্রিং আক্ষরিক যোগ করুন ।
জ্যাক


4
find . -type f -name '*.t1'ফোল্ডারগুলি এড়ানোর জন্য ব্যবহারকারীকে পছন্দ করুন
গোলক সারঙ্গি

9

যদি আপনার সংস্করণটির বিকল্পটি bashসমর্থন করে globstar(সংস্করণ 4 বা তার পরে):

shopt -s globstar
for f in **/*.t1; do
    mv "$f" "${f%.t1}.t2"
done 

7

অথবা আপনি কেবল mmvকমান্ডটি ইনস্টল করে করতে পারেন :

mmv '*.t1' '#1.t2'

এখানে #1প্রথম গ্লোব অংশ যেমন *ইন *.t1

বা খাঁটি বাশ স্টাফের একটি সহজ উপায় হ'ল:

for f in *.t1; do
    mv "$f" "${f%.t1}.t2"
done

(যেমন: forবাইরের কমান্ড যেমন lsবা এর সাহায্য ছাড়াই ফাইল তালিকাভুক্ত করতে পারেfind )

এইচটিএইচ


7
আমি ধরে নিই যে ওপি'র "পুনরাবৃত্ত" এর ব্যবহারটি ডিরেক্টরিটির উপ-ডিরেক্টরিতে ফাইলগুলির নাম পরিবর্তন করতেও বোঝায়।
চিপনার

4
এটি প্রথম **.t1
গ্লোব

6

আমি ব্যাশে এইভাবে করব:

for i in $(ls *.t1); 
do
    mv "$i" "${i%.t1}.t2" 
done

সম্পাদনা: আমার ভুল: এটি পুনরাবৃত্তিযোগ্য নয়, ফাইলের নাম পুনরাবৃত্ত করার জন্য এটি আমার উপায়:

for i in $(find `pwd` -name "*.t1"); 
do 
    mv "$i" "${i%.t1}.t2"
done

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