ফাইলের নামগুলিতে পাঠ্য যুক্ত করুন যাতে কোনও বিন্দু থাকে না


9

নিম্নলিখিত ফাইলগুলি দেওয়া:

english_api
english_overview
style.css

আমি পেতে চাই:

english_api.html
english_overview.html
style.css

অন্য কথায় .টার্মিনালটি ব্যবহার করে ডিরেক্টরিতে ডট ( ) অন্তর্ভুক্ত না এমন সমস্ত ফাইলের মধ্যে কীভাবে টেক্সট যুক্ত করতে হয় ।

স্পষ্টতই সেই ফোল্ডারে প্রচুর ফাইল রয়েছে; আমি উদাহরণ হিসাবে 3 লিখেছিলাম।

আমি যদি বলি যে, সেই ফোল্ডারের .cssসাথে প্রতিস্থাপন করুন .html, আমি ব্যবহার করব:

rename .css .html *.css

তবে আমি এমন ফাইলগুলির সাথে মেলে এমন কোনও উপায়ের কথা ভাবতে পারি না যাতে কিছু থাকে না। এছাড়াও renameকমান্ড ব্যবহার করে কীভাবে যুক্ত (বনাম প্রতিস্থাপন) করবেন ?

উত্তর:


13

এই findআদেশটি চেষ্টা করুন ,

find . -type f ! -name "*.*" -exec mv {} {}.html \;

ফাইল যা ধারণ করে না তাদের ফাইলের নামের মধ্যে বিন্দু এই বর্তমান ডিরেক্টরির মধ্যে উপস্থিত renames filename.htmlফরম্যাট ( যোগ .htmlঅবশেষে )।

. -> বর্তমান ডিরেক্টরি প্রতিনিধিত্ব করে

-type f -> কেবল ফাইলগুলিতে এই অপারেশন করতে।

! -name "*.*" -> যে ফাইলগুলির নামে বিন্দু নেই সেগুলির নাম মুদ্রণ করুন।

-exec mv {} {}.html -> findকমান্ড নিষ্ক্রিয় ফাইল নামগুলিতে এই পদক্ষেপটি (বা) পুনর্নবীকরণ অপারেশন সম্পাদন করে।

\; -> findকমান্ডের শেষে প্রতিনিধিত্ব করে ।


6

ব্যাশে, আপনি বর্ধিত শেল গ্লোব উদাহরণস্বরূপ ব্যবহার করতে পারেন

for file in path/to/files/!(*.*); do echo mv "$file" "$file.html"; done

( echoএকবারে আপনি নিশ্চিত করেছেন যে এটি সঠিক প্যাটার্নের সাথে মিলেছে) remove যদি বর্ধিত গ্লোববিং ইতিমধ্যে সক্ষম না করা থাকে তবে আপনি এটি দিয়ে সক্ষম করতে পারেন shopt -s extglob

আর একটি বিকল্প হ'ল renameআক্ষরিক বাদ দিয়ে একটি রেইজেক্সের সাথে পার্ল-ভিত্তিক ফাংশন ব্যবহার করছে.

rename -nv 's/^[^.]+$/$&.html/' path/to/files/*

( nআপনি একবারে নিশ্চিত হয়ে গেলে বিকল্পটি সঠিক প্যাটার্নের সাথে মিলে যায়) remove


for file in path/to/files/!(*.*); do echo mv "$file" "$file.html"; doneকমান্ড ডিরেক্টরিগুলিরও নাম পরিবর্তন করে।
অবিনাশ রাজ

2

এই জাতীয় ক্ষেত্রে আমার পছন্দসই mmv। এটি উবুন্টুতে ডিফল্টরূপে ইনস্টল করা হয়নি তবে আপনি sudo apt-get install mmvকমান্ড ব্যবহার করে ইনস্টল করতে পারেন ।

আপনার ক্ষেত্রে আপনার এটি দুটি বার ব্যবহার করা দরকার:

  1. .htmlপ্রতিটি ফাইলের নামের শেষে যুক্ত করে বর্তমান ডিরেক্টরি থেকে সমস্ত ফাইলের নাম পরিবর্তন করুন:

    mmv -v '*' '#1.html'
    
  2. এক বা একাধিক .(বিন্দু) নামে আগে থাকা সমস্ত ফাইলগুলির পুনরায় নাম (পিছনে ) দিন:

    mmv -v '*.*.html' '#1.#2'
    

বা, এক লাইনে:

mmv -v '*' '#1.html' && mmv -v '*.*.html' '#1.#2'

-vবিকল্প বাধ্যতামূলক নয়। আমি এটি কেবল একটি ভার্বোজ আউটপুট হিসাবে ব্যবহার করি কারণ এটি ছাড়া mmvচুপ করে থাকে actions

দেখুন man mmvআরও তথ্যের জন্য।


1

পার্ল নাম বদলে কমান্ড ( prename) দিয়ে আপনি একটি শর্ত যুক্ত করতে পারেন যে ফাইলটির নামটিতে একটি বিন্দু থাকতে হবে। পার্ল স্নিপেট যদি কোনও ফাইলের নাম পরিবর্তন না করে তবে সেই ফাইলটি অচ্ছুত রয়েছে। এটি লেখার কয়েকটি উপায় এখানে রইল:

prename '/\./ or s/$/.html/' *
prename 's/$/.html/ unless /\./' *
prename '$_ .= ".html" unless /\./' *
prename '$_ = "$_.html" unless /\./' *
prename 'if (!/\./) {$_ = "$_.html"}' *

-2

উত্তরগুলি নিখুঁত, আমি আপনাকে আরও একটি আদেশ দিচ্ছি যা এই কাজটি করে:

ls -1 | grep -v "\." | awk '{print "mv "$0" "$0".html"}' | sh

কিছু ব্যাখ্যা:

ls - list directory contents

 -1     list one file per line

grep prints the matching lines.

-v, --invert-match
              Invert the sense of matching, to select non-matching lines.  (-v
              is specified by POSIX.)

Awk is mostly used for pattern scanning and processing. It searches one or more files to see if they contain lines that matches with the specified patterns and then perform associated actions.

বিঃদ্রঃ :

আমি আপনার দৃশ্যের চেষ্টা করি এবং কমান্ডটি কাজটি করে।


6
এটি ফাইলের নামগুলিতে ব্যর্থ হয় যা কোনও ধরণের শ্বেতস্পেস (স্পেস, ট্যাব, নিউলাইন ইত্যাদি) ধারণ করে। একটি সাধারণ নিয়ম হিসাবে, আপনার কখনই বিশ্লেষণ করা উচিত নয়ls
টেরডন

ঠিক আছে টেরডন আপনার মন্তব্যের জন্য ধন্যবাদ, তবে আমি কীভাবে একই কমান্ডে এটি সমাধান করতে পারি
nux

3
আপনি সত্যিই পারবেন না। নেই প্রায় কোনো সুরক্ষিত উপায় ম বিশ্লেষণ করতে। আপনি যদি সত্যিই এটি ব্যবহার করে করতে চান awkএবং sh, এর মতো কিছু চেষ্টা করুন printf "'%s'\n" -- !(*.*) | awk '{print "mv -- "$0" "$0".html"}' | sh। এটি এখনও নতুন লাইনের সাথে ফাইলের নামগুলি ভেঙে ফেলবে তবে কমপক্ষে এটি ফাঁকা জায়গাগুলি মোকাবেলা করতে পারে। --মামলা রয়েছে যেখানে আপনি ফাইলের নাম থেকে শুরু করে কার্যকলাপের জন্য দরকারি -
টেরডন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.