আমার একটি ফোল্ডারে বেশ কয়েকটি ফাইল রয়েছে এবং আমি সমস্ত ফাইলের নামের প্রত্যেক স্পেস অক্ষরকে আন্ডারস্কোর দিয়ে প্রতিস্থাপন করতে চাই। আমি কীভাবে এটি অর্জন করতে পারি?
আমার একটি ফোল্ডারে বেশ কয়েকটি ফাইল রয়েছে এবং আমি সমস্ত ফাইলের নামের প্রত্যেক স্পেস অক্ষরকে আন্ডারস্কোর দিয়ে প্রতিস্থাপন করতে চাই। আমি কীভাবে এটি অর্জন করতে পারি?
উত্তর:
এটি করা উচিত:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
for file in *; do mv "$file" $(echo $file | tr ' ' '_') ; done
*থেকে PATH_TO_YOUR_DIRECTORY।
আমি 'পুনর্নবীকরণ' কমান্ডটি ব্যবহার করতে পছন্দ করি যা পার্ল-স্টাইলের রেজেক্সেস নেয়:
rename "s/ /_/g" *
আপনি -এন পতাকা দিয়ে একটি শুকনো রান করতে পারেন:
rename -n "s/ /_/g" *
rename " " "_" *
renameএটি ওএসএক্স-এ উপলব্ধ নয়।
renameএ উপলব্ধ।
Sh ব্যবহার করুন ...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
আপনি যদি ট্রিগারটি টানার আগে এটি চেষ্টা করে দেখতে চান তবে এটিকে পরিবর্তন mvকরুন echo mv।
আপনি যদি ব্যাশ ব্যবহার করেন:
for file in *; do mv "$file" ${file// /_}; done
mv --help' for more information. mv: when moving multiple files, last argument must be a directory Try আরও তথ্যের জন্য mv --help ' চেষ্টা করুন।
mv --help' for more information. mv: missing file argument Try আরও তথ্যের জন্য এমভি --help ' চেষ্টা করুন। এমভি: অনুপস্থিত ফাইল আর্গুমেন্ট mv --help' for more information. mv: missing file argument Try আরও তথ্যের জন্য mv --help ' চেষ্টা করুন।
আপনি যদি পুনঃস্থাপনের কাজটি পুনরাবৃত্তভাবে প্রয়োগ করতে চান ? আপনি এটা কিভাবে করবেন?
ঠিক আছে, আমি নিজেই উত্তরটি খুঁজে পেয়েছি। সর্বাধিক মার্জিত সমাধান নয়, (শর্ত মেনে চলতে না এমন ফাইলগুলির পুনরায় নামকরণের চেষ্টাও করে) তবে এটি কার্যকর হয়। (বিটিডাব্লু, আমার ক্ষেত্রে আমার ফাইলগুলিকে '% 20' দিয়ে নামকরণ করতে হবে, আন্ডারস্কোর দিয়ে নয়)
#!/bin/bash
find . -type d | while read N
do
(
cd "$N"
if test "$?" = "0"
then
for file in *; do mv "$file" ${file// /%20}; done
fi
)
done
এখানে আরও একটি সমাধান:
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
আপনার সমস্ত ফাইল .txt এর ছিল ধরে ধরে এই জাতীয় কিছু চেষ্টা করুন:
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
tr --help' for more information. mv: missing file argument Try আরও তথ্যের জন্য এমভি --help ' চেষ্টা করুন '
আপনার ভেরিয়েবলগুলি উদ্ধৃত করুন:
for file in *; do echo mv "'$file'" "${file// /_}"; done
প্রকৃত নাম পরিবর্তন করতে "প্রতিধ্বনি" সরান।
\'1130 lake micigan view.jpg\'': No such file or directory mv: cannot stat এমভিয়ের মতো ত্রুটি তৈরি করে: stat '1130_1_edroom_floor_plan.jpg' '' স্ট্যাটাস করতে পারে না : এই জাতীয় কোনও ফাইল বা ডিরেক্টরি \'1130_BedPicture_8.jpg\'': No such file or directory mv: cannot stat এমভি: স্ট্যাটাস করতে পারে না 11 '1130_diningroom_table.jpg' '': এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই
সবচেয়ে সহজ উপায় অন্য স্ট্রিং সঙ্গে একটি স্ট্রিং (আপনার ক্ষেত্রে স্থান চরিত্র) প্রতিস্থাপন করতে Linuxব্যবহার করা হয় sed। আপনি নিম্নলিখিত হিসাবে এটি করতে পারেন
sed -i 's/\s/_/g' *
আশাকরি এটা সাহায্য করবে.
আমি বিশ্বাস করি যে আপনার উত্তরটি আন্ডারস্কোর সহ ফাইলের নামগুলিতে স্থানগুলি প্রতিস্থাপনে রয়েছে ।
একটি দিয়ে সমস্ত ফাইলের নাম পরিবর্তন করতে .pyএক্সটেনশন ব্যবহারের করতে,
find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
নমুনা আউটপুট,
$ find . -iname "*.py" -type f
./Sample File.py
./Sample/Sample File.py
$ find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
$ find . -iname "*.py" -type f
./Sample/Sample_File.py
./Sample_File.py
1 - foo.jpgএবং আমার ফোল্ডারটি এর1.jpgমধ্যে রয়েছে।