ফাইলটির নামকরণ যা এর নামে একটি উদ্ধৃতি চিহ্ন পেয়েছে


11

আমি কিছুটা সমস্যা পেয়েছি। একজন ক্লায়েন্ট আমাকে সত্যিকারের পুরানো সার্ভার থেকে সাইট মাইগ্রেশন করার দায়িত্ব দিয়েছেন। তারা কীভাবে সেখানে পৌঁছেছে তা জানেন না, তবে 'তাদের নামে ফাইল রয়েছে । ফাইলটির নতুন নামকরণের কোনও উপায় আছে? mvকৌশলটি মনে হচ্ছে না।

ls এটি হিসাবে দেখায় 90843_O\\'ConnorPaul_GeneralManager.jpg

আমি যখন চেষ্টা করি

 mv 90843_O\\'ConnorPaul_GeneralManager.jpg 90843_O_ConnorPaul_GeneralManager.jpg

এটি আরও >নতুন ইনপুটটির জন্য অপেক্ষা করার সাথে নতুন লাইনে কিছুই করে না ।

আমি যদি চেষ্টা করি

mv 90843_O\'ConnorPaul_GeneralManager.jpg 90843_O_ConnorPaul_GeneralManager.jpg

আমি ত্রুটি পেয়েছি

এমভি: '90843_O stat' কনারপল_জেনারাল ম্যানেজ.আরজিপিজি 'নির্ধারণ করতে পারে না: এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই

এছাড়াও, নির্দিষ্ট ফোল্ডারে সমস্ত ফাইলে পরিবর্তন \'করার কোনও সহজ উপায় আছে _?


1
আপনার যদি অতিরিক্ত ব্যবহার করে থাকে তবে vidirএটি এই ধরণের সমস্যার সহজ সমাধান to
ডারোবার্ট

উত্তর:


6

ব্যাশ ট্যাব সমাপ্তিটি এখানে সঠিক জিনিস করতে সক্ষম হবে যদি আপনি কেবল mv 90843_Oট্যাবটি টাইপ করেন এবং টিপেন। অন্যথায়, নামটি সঠিকভাবে পালানোর একটি উপায় হ'ল:

mv "90843_O\\\\'ConnorPaul_GeneralManager.jpg" dest.jpg

ডাবল উদ্ধৃতিগুলি এড়িয়ে চলার প্রয়োজনীয়তা সরিয়ে দেয় ', তবে দুটি ব্যাকস্ল্যাশ অক্ষরকে এখনও পালাতে হবে (প্রত্যেকটির জন্য একটি অতিরিক্ত ব্যাকস্ল্যাশ চারটি ব্যাকস্ল্যাশ করে)। আরেকটি বিকল্প হ'ল:

mv '90843_O\\'\'ConnorPaul_GeneralManager.jpg dest.jpg

এখানে একক উদ্ধৃতিতে ব্যাকস্ল্যাশ রাখলে সেগুলি থেকে বাঁচার প্রয়োজনীয়তা দূর হয় তবে আক্ষরিক যোগ করার জন্য আপনার একক উদ্ধৃতি শেষ করতে হবে '। উদ্ধৃতি সমাপ্ত হওয়ার পরে এটি পালিয়ে যায়।

নোটটি এখানে একক উদ্ধৃতি হিসাবে নামে ব্যাকস্ল্যাশ থাকার সাথে করা হিসাবে নোট করুন। \\'ক্রমটি প্রতিস্থাপন করতে (যেহেতু প্রশ্নে ফাইলনামে দুটি ব্যাকস্ল্যাশ রয়েছে তাই উভয়ই সমস্যা সৃষ্টি করবে) একটি ডিরেক্টরিতে লুপ ব্যবহার করে একটি ডিরেক্টরিতে সমস্ত ফাইলের আন্ডারস্কোর সহ:

for file in *"\\\\'"*; do
  mv -i "$file" "${file//"\\\\'"/_}"
done

-iকরতে হবে mvপ্রম্পট যদি কোন ফাইল ওভাররাইট হবে। ব্যবহার prename( renameঅনেক সিস্টেমে এই লিঙ্ক):

prename -n 's:\\\\'\'':_:g' *"\\\\'"*

সরান -nযখন আপনি খুশি এটা করছে কি আপনি চান হয়। নোট করুন যে ব্যাকস্ল্যাশ অক্ষরগুলি এখানে পার্ল এক্সপ্রেশনের ভিতরে পালাতে হবে, যদিও তাদের চারপাশে একক উদ্ধৃতি রয়েছে (একক উদ্ধৃতি ব্যতীত আপনার আটটি ব্যাকস্ল্যাশ প্রয়োজন হবে যেহেতু চারটি শেল দ্বারা সরিয়ে দেওয়া হবে এবং পার্ল এক্সপ্রেশনটির অংশ হবে না)।


4

আপনি এই renameজাতীয় কাজের জন্য ব্যবহার করতে পারেন :

➜  lab  ls                                               
1dsfa.file   6033dsfa.file                           90843_O\\'ConnorPaul_GeneralManager.jpg
56dsfa.file  90843_O\'ConnorPaul_GeneralManager.jpg
➜  lab  rename "s/\'//g" *
➜  lab  ls
1dsfa.file   6033dsfa.file                           90843_O\ConnorPaul_GeneralManager.jpg
56dsfa.file  90843_O\\ConnorPaul_GeneralManager.jpg

আপনি যদি প্রতিস্থাপন করতে চান তবে নামটিও 'ব্যবহার _করতে পারেন:

rename "s/\'/_/g" *

-2

গ্রার, @ গ্র্যাম আমাকে এতে মারধর করেছে, তবে আমি যাই হোক পোস্ট করব ...

আপনি যদি ডাবল উদ্ধৃতি সহ ফাইলের নামটি উদ্ধৃত করেন, যেমন mv -v "90843_O'ConnorPaul_GeneralManager.jpg" 90843_O_ConnorPaul_GeneralManager.jpg, এটি কৌশলটি করে; ব্যবহার -vকরা alচ্ছিক তবে এটি কী করেছে তা তা জানিয়ে দেবে। আমি বিশ্বাস করি যে সমস্ত অক্ষর থেকে পালানো ছাড়াও দ্বিতীয় উপায় আছে, যদি তা সম্ভবও হয়। আমি কেবল এই উপায়টিই জানি যে শেলটি পাঠ্যটি প্রসেস করবে যেহেতু এটি একক উদ্ধৃতিগুলির মধ্যে নেই, তবে এটি কোনওভাবেই হস্তক্ষেপ করে না কারণ এটি অভ্যন্তরীণ কোড নয়, এবং প্রক্রিয়া করতে অতিরিক্ত সময় ব্যর্থ হয়।

সবেমাত্র পরীক্ষা করা হয়েছে, আপনার >ডাবল-উদ্ধৃত পাঠ্যের মধ্যে চরের মতো থাকতে পারে এবং এটি ফাইলটির অংশ হিসাবে নেওয়া হবে।

ভবিষ্যতের জন্য একটি পরামর্শ হিসেবে, আপনি ব্যবহার করতে পারেন ./যদি এটি একটি ড্যাশ দিয়ে শুরু ফাইলের মত সমস্যার দেয়, ফাইলের নাম সামনে ডানে: mv ./-file fileনামান্তর হবে -fileথেকে file। এর মতো ক্ষেত্রে আপনি ব্যতিক্রম হিসাবে ফাইলের নামটি উদ্ধৃত করতে বা এড়াতে পারবেন না।

অদ্ভুতভাবে যথেষ্ট, আমি 90843_O'ConnorPaul_GeneralManager.jpgএকক উদ্ধৃতি দ্বারা পালাতে পারলে ফাইলটি তৈরি করতে পারতাম \', তবে এটি যদি দ্বিগুণ-উদ্ধৃত না হয় বা পালানো না হয় তবে এটি তৈরি করতে পারে না।

পিএস: বাশ সম্পূর্ণ হওয়া অন্য একটি উপায়, এটি আপনার ফাইলের সাথে ফাইলের নাম ইস্যুতে কাজ করেছিল, তবে এটি "ড্যাশ" ফাইল / ফোল্ডারগুলির সাথে কাজ করবে না: কেবল নামের একটি অংশ লিখুন এবং ট্যাবে চাপুন, এটি বাকি কাজ করে।


ডাউনভোট কেন? আমি অন্যদের আগে লিখছিলাম তবে আমি এটিকে প্রথম পোস্ট করার জন্য খুব দ্রুত ছিলাম না।
রৌতমিক্কা

আমি ছিল না। কে নিচে ভোট দিয়েছে সে সম্পর্কে কোন ক্লু নেই।
ইগর ইয়াভিচ

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