লিনাক্স - ফাইলের নামের জায়গাগুলি প্রতিস্থাপন


96

আমার একটি ফোল্ডারে বেশ কয়েকটি ফাইল রয়েছে এবং আমি সমস্ত ফাইলের নামের প্রত্যেক স্পেস অক্ষরকে আন্ডারস্কোর দিয়ে প্রতিস্থাপন করতে চাই। আমি কীভাবে এটি অর্জন করতে পারি?

উত্তর:


177

এটি করা উচিত:

for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done

এটি আমার পক্ষে কাজ করে না। এটি দাবি করেছে যে অভিন্ন ফাইল রয়েছে (ভুল ফাইলের নাম সহ)। যেমন নাম পরিবর্তন করার চেষ্টা করছে 1 - foo.jpgএবং আমার ফোল্ডারটি এর 1.jpgমধ্যে রয়েছে।
বাইসোর

4
আমি কোটকের কাছাকাছি থাকাকালীন ব্যাকটিক্স পড়তে কিছুটা কঠিন পেয়েছি। একই তবে আরও পাঠযোগ্য হবেfor file in *; do mv "$file" $(echo $file | tr ' ' '_') ; done
কামিল এস জারন

দ্রষ্টব্য: এটি সেই ডিরেক্টরি ছাড়া চালিত হয় যার ফাইলগুলির নাম আপনি আপডেট করতে চান। অন্যথা, আপনি পরিবর্তন করতে পারেন *থেকে PATH_TO_YOUR_DIRECTORY
সিএফৎজ

74

আমি 'পুনর্নবীকরণ' কমান্ডটি ব্যবহার করতে পছন্দ করি যা পার্ল-স্টাইলের রেজেক্সেস নেয়:

rename "s/ /_/g" *

আপনি -এন পতাকা দিয়ে একটি শুকনো রান করতে পারেন:

rename -n "s/ /_/g" *

4
আপনার যদি পার্ল-স্টাইলের পুনরায় নামকরণ করা হয় এবং সরল রেডহাট / ফেডোরা এক না হয় তবে এটি কাজ করবে
ডেভিড ডিন

9
ফেডোরার সংস্করণটি হবেrename " " "_" *
ডেভিড ডিন

4
renameএটি ওএসএক্স-এ উপলব্ধ নয়।
এটিয়েন লো-ডিকারি

ম্যাকোস 10.12.3 renameএ উপলব্ধ।
সুং চো

4
@ ডেভিডডিয়ান আর্চ লিনাক্সের নতুন নামটি কেবলমাত্র প্রথম উপস্থিতিটি প্রতিস্থাপন করবে (একাধিক স্পেস সহ ফাইল / ডিরেক্টরিগুলির জন্য খুব সুবিধাজনক নয়)। এটিতে ফেডোরার মতো একই বাক্য গঠন রয়েছে, তাই আমার সন্দেহ হয় তারা একই রকম হতে পারে। তবে পার্ল-নামটি ইনস্টল করা যেতে পারে।
প্রোসাইটোস

15

Sh ব্যবহার করুন ...

for i in *' '*; do   mv "$i" `echo $i | sed -e 's/ /_/g'`; done

আপনি যদি ট্রিগারটি টানার আগে এটি চেষ্টা করে দেখতে চান তবে এটিকে পরিবর্তন mvকরুন echo mv


4

আপনি যদি ব্যাশ ব্যবহার করেন:

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 ' চেষ্টা করুন।
মিথুন শ্রীধরণ

পছন্দ করুন

4

আপনি যদি পুনঃস্থাপনের কাজটি পুনরাবৃত্তভাবে প্রয়োগ করতে চান ? আপনি এটা কিভাবে করবেন?

ঠিক আছে, আমি নিজেই উত্তরটি খুঁজে পেয়েছি। সর্বাধিক মার্জিত সমাধান নয়, (শর্ত মেনে চলতে না এমন ফাইলগুলির পুনরায় নামকরণের চেষ্টাও করে) তবে এটি কার্যকর হয়। (বিটিডাব্লু, আমার ক্ষেত্রে আমার ফাইলগুলিকে '% 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

3

এখানে আরও একটি সমাধান:

ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
  1. ফাইলটির নামের চারপাশে উদ্ধৃতি যুক্ত করতে awk ব্যবহার করে
  2. আন্ডারস্কোর দিয়ে স্থান প্রতিস্থাপন করতে সেড ব্যবহার করে; মূল নামটি মুদ্রণ সহ (উগ্র থেকে); তারপরে বিকল্প নাম
  3. xargs একবারে 2 টি লাইন নেয় এবং এটি এমভিতে পাস করে

2

আপনার সমস্ত ফাইল .txt এর ছিল ধরে ধরে এই জাতীয় কিছু চেষ্টা করুন:

for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done

4
নীচের ত্রুটি টিআর পেয়েছি: এমভি অনুবাদ করার সময় দুটি স্ট্রিং দিতে হবে: অনুপস্থিত ফাইল আর্গুমেন্ট আরও তথ্যের জন্য `এমভি - হেল্প 'চেষ্টা করুন।
মিথুন শ্রীধরণ

4
আগুন ত্রুটি ট্র: অনেক বেশি যুক্তি tr --help' for more information. mv: missing file argument Try আরও তথ্যের জন্য এমভি --help ' চেষ্টা করুন '
মিথুন শ্রীধরণ

1

আপনার ভেরিয়েবলগুলি উদ্ধৃত করুন:

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' '': এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই
মিথুন শ্রীধরণ

লিনাক্স লিনাক্স 2.6.9-42.0.3.EL.W1smp # 1 এসএমপি শুক্র আগস্ট 14 15:48:17 এমডিটি 2009 আই 686 আই 686 আই 386 জিএনইউ / লিনাক্স
মিথুন শ্রীধরণ

1

সবচেয়ে সহজ উপায় অন্য স্ট্রিং সঙ্গে একটি স্ট্রিং (আপনার ক্ষেত্রে স্থান চরিত্র) প্রতিস্থাপন করতে Linuxব্যবহার করা হয় sed। আপনি নিম্নলিখিত হিসাবে এটি করতে পারেন

sed -i 's/\s/_/g' *

আশাকরি এটা সাহায্য করবে.


এটি প্রশ্নের সমাধান করে না।
amit

0

4
যদিও এটি তাত্ত্বিকভাবে প্রশ্নের উত্তর দিতে পারে, তবে এখানে উত্তরের প্রয়োজনীয় অংশগুলি অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্ক সরবরাহ করা ভাল।
বিল করুন

0

একটি দিয়ে সমস্ত ফাইলের নাম পরিবর্তন করতে .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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.