ব্যাশে অক্ষর মুছে ফেলে আমি কীভাবে একাধিক ফাইলের নাম পরিবর্তন করব?


10

আমাকে প্রতিটি ফাইলের নামের জন্য প্রথম 5 টি অক্ষর সরিয়ে ডিরেক্টরিতে একাধিক ফাইলের নামকরণ করতে হবে।
আমি কীভাবে এটি বাশ / শেল করতে পারি? আমি উবুন্টু ১১.১০ ব্যবহার করছি। ধন্যবাদ।

উত্তর:


11

কিছুটা লুপের জন্য একটি সহজ sedকৌশলটি করবে:

% touch xxxxx{foo,bar,baz}
% ls -l xxxxx{foo,bar,baz}
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 xxxxxbar
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 xxxxxbaz
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 xxxxxfoo  
% for file in xxxxx*; do mv $file $(echo $file | sed -e 's/^.....//'); done
% ls -l foo bar baz
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 bar
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 baz
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 foo

বিকল্প Regex মধ্যে sedকোনো পাঁচটি অক্ষর (মেলে বলেছেন .স্ট্রিং (শুরুতে মানে কোনো চরিত্র) ^) এবং এটা মুছে ফেলুন।


9

বাশের কিছু স্ক্রিপ্টিং সম্ভাবনা রয়েছে। এখানে একটি উপায়:

for file in ??????*; do mv $file `echo $file | cut -c6-`; done

এটি কী করবে তা পরীক্ষা করার একটি সহজ উপায় হ'ল কমান্ডের সামনে একটি প্রতিধ্বনি যুক্ত করা:

for file in ??????*; do echo mv $file `echo $file | cut -c6-`; done

ছয়টি প্রশ্ন চিহ্ন নিশ্চিত করে যে আপনি কেবল 5 টির চেয়ে বেশি অক্ষরের ফাইলনামগুলিতে এটি করার চেষ্টা করেছেন।


5

এটি করার জন্য আপনি সেড ব্যবহার করতে পারেন

for file in * ; do mv $file  $(echo $file |sed 's/^.\{5\}//g'); done

5

সমস্ত দুর্দান্ত উত্তর, ধন্যবাদ। আমার ক্ষেত্রে এটিই কাজ করেছিল:

rename 's/^.......//g' *

1

আমার দুই সেন্ট':

for file in *; do mv $file ${file:5}; done

${file:n}nস্ট্রিংয়ের প্রথম অক্ষরগুলি সরিয়ে দেয় file


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