একটি রেজেক্সের সাথে লিনাক্সে ফাইলগুলির নামকরণ


9

আমার একদল ফাইল ছিল যা আমি ধারাবাহিকভাবে নাম পরিবর্তন করতে চাই, ফাইলগুলির নামগুলির মতো জিনিস রয়েছে

"System-Log-01-01-2009-NODATA.txt"
"Something-Log-01-01-2009-NODATA.txt"

এবং আমি এগুলি লোয়ারকেস, yyyymmdd, .Llg এক্সটেনশন হিসাবে চেয়েছিলাম

"system.20090101.log"
"something.20090101.log"

উত্তর:


14

আমি এটি করার জন্য পার্ল স্ক্রিপ্টগুলি লিখতাম, যতক্ষণ না আমি পুনর্নামকরণ কমান্ডটি আবিষ্কার করি।

পুনর্নামকরণ করতে এটি পার্ল রেজেক্স গ্রহণ করে:

এর জন্য, আমি দুটি কমান্ড টাইপ করেছি:

rename 's/(\w+)-(\w+)-(\d\d)-(\d{4})-NODATA.txt\$1.$4$3$2.log$//' *
rename 'y/A-Z/a-z/' *.log

কিছু ডিস্ট্রোজের জন্য যদিও renameএই কার্যকারিতাটি নেই (এর ম্যান পৃষ্ঠাটি দেখুন) এবং আপনাকে ইনস্টল করতে হতে পারে perl-renameবা prename


খুব সুন্দর উত্তর
জুনিয়ো

8
সাবধান, কিছু ডিসট্রস একটি অদৃশ্য নামকরণ কমান্ড পাঠায়। আপনার ডিস্ট্রো কোনটি প্রথমে আছে তা পরীক্ষা করুন।
ডার্বোবার্ট

আমি জানতাম mmvতবে অবশেষে ধন্যবাদ renameআমি রেজেক্সের শক্তিটি ব্যবহার করতে পারি
লুডোভিচ কিউটি

5
আর্চ লিনাক্স এ এটি perl-rename
ওলেহ প্রাইপিন

6

যেহেতু আমার পুনর্নামকরণ আদেশ নেই, তাই আমি এটির উপর নির্ভর করছি:

for myfile in /my/folder/*; do
    target=$(echo $myfile|sed -e 's/foo/bar/g')
    mv "$myfile" "$target"
done

5

মিমিভিভ হ'ল একাধিক ফাইল সরিয়ে / পুনরায় নামকরণের জন্য একটি লিনাক্স ইউটিলিটি। এটি বেশিরভাগ বিতরণের জন্য রেপো থেকে পাওয়া যায়। উপরে আপনার উদাহরণের জন্য, আপনি এটি করতে পারেন:

mmv *-Log-*-*-*-NODATA.txt #l1.#4#3#2.log

আরও তথ্যের জন্য, এই ডেবেড নিবন্ধ বা ম্যান পৃষ্ঠাটি পড়ুন


5

renameব্যবহার খুব "মানক" নয়। প্রতিটি ডিস্ট্রো জাহাজ একটি আলাদা renameসরঞ্জাম সহ। উদাহরণস্বরূপ, এখানে জেন্টুতে, প্যাকেজ renameথেকে এসেছে sys-apps/util-linuxএবং রিজেক্সকে সমর্থন করে না।

হামিশ ডাউনার পরামর্শ দিয়েছিলেন mmv, এটি বিশেষত স্ক্রিপ্টগুলির অভ্যন্তরে ব্যবহারের জন্য কার্যকর বলে মনে হচ্ছে।

অন্যদিকে, সাধারণ ক্ষেত্রে, আপনি হয়ত নাম পরিবর্তন করতে পারেন । এতে রয়েছে qmvএবং qcpকমান্ড রয়েছে, যা আপনার পছন্দের একটি পাঠ্য সম্পাদক (আমার পছন্দ: ভিম) খুলবে এবং আপনাকে সেখানে গন্তব্য ফাইলের নামগুলি সম্পাদনা করার অনুমতি দেবে। সম্পাদকটি সংরক্ষণ এবং বন্ধ করার পরে qmv/ qcpসমস্ত পুনর্নবীকরণ করবে।

উভয় mmvএবং qmvযথাযথভাবে ফাইলের নাম পরিবর্তন করতে এবং বিজ্ঞপ্তি পুনরায় নামগুলি সনাক্ত করতে যথেষ্ট স্মার্ট এবং প্রয়োজনে স্বয়ংক্রিয়ভাবে একটি অস্থায়ী ফাইল তৈরি করবে।


জেন্টুতে আপনি sys-apps/renameপ্যাকেজটি উত্সাহিত করতে পারেন যা আপনাকে দেয় renamexmযা রেজেক্স পুনর্নামকরণের পাশাপাশি ভর আপার / ছোট হাতের এবং অন্যান্য দুর্দান্ত জিনিসগুলি করে।
রেডিক্যান্ড

1

ন্যায্য হতে:

rename 's/(\w+)-(\w+)-(\d\d)-(\d{4})-NODATA.txt\$1.$4$3$2.log$//' *.txt

এই আউটপুট দেয়:

Use of uninitialized value $4 in regexp compilation at (eval 1) line 1.
Use of uninitialized value $3 in regexp compilation at (eval 1) line 1.
Use of uninitialized value $2 in regexp compilation at (eval 1) line 1.

কিন্তু:

rename -n 's/(\w+)-\w+-(\d{2})-(\d{2})-(\d{4})-NODATA\.txt$/$1.$4$3$2\.log/' *.txt && rename 'y/A-Z/a-z/' System.20090101.log

সঠিক আউটপুট দেয়:

System-Log-01-01-2009-NODATA.txt renamed as System.20090101.log
System.20090101.log renamed as system.20090101.log

{-n} সাথে {-v} স্যুইচ প্রতিস্থাপন


1

এটি করার জন্য আমি একটি ছোট বাশ স্ক্রিপ্ট তৈরি করেছি:

#!/bin/bash

for f in `ls /path/to/folder`; do
  # Create new filename from the old one
  # This example replaces A (upper case) with a (lower case)
  new_file=`echo "$new_file" | tr A a`

  # Rename the file
  mv "$f" "$new_file"
done

সাধারণভাবে পার্সিং lsআউটপুটটি সেরা ধারণা নয়। একটি এলোমেলো অনুসন্ধান ইউনিক্সে এই দীর্ঘ পঠিত টান আপ আপনার বিনোদন জন্য এসই । | এছাড়াও আপনার উত্তরটির সাথে প্রশ্নের উত্তরটি আরও ভালভাবে মিলবেtr '[:upper:]' '[:lower:]'
এইচবি ব্রাইজন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.