সম্পূর্ণ ডিরেক্টরি গাছকে ছোট হাতের নামগুলিতে পরিবর্তন করুন


12

আমি একটি ওয়েবসাইট রূপান্তর কাজ করছি। ওয়েব সার্ভার থেকে লিঙ্কযুক্ত ও পরিবেশন করা ফাইলগুলি সংবেদনশীল ছিল না। তবে, আমি আমার লিনাক্স সিস্টেমে সাইটের ডাম্প তৈরি করেছি এবং ডেটা স্থানান্তর করতে স্ক্রিপ্ট লিখছি। সমস্যাটি হ'ল আমি পৃষ্ঠাগুলিতে লিংক স্ট্রিং এবং ফাইল সিস্টেমে আসল ওয়ার্ড কেসের মধ্যে সংবেদনশীলতার সমস্যা নিয়ে চলেছি।

উদাহরণস্বরূপ, <a href='/subfolder/PageName.asp'>আসল ফাইল থাকাকালীন কোনও পৃষ্ঠার লিঙ্ক থাকতে পারে /subfolder/pagename.asp। একইভাবে চিত্রগুলির সাথে - <img src='spacer_sm.gif'>হতে পারে Spacer_Sm.gif

সুতরাং আমার ধারণা সাইট ডিরেক্টরি ডাউনলোডের জন্য সমস্ত ডিরেক্টরি এবং ফাইলের নামগুলি তাদের লোয়ার-কেস সমতুল্যে পরিবর্তন করে। আমি কীভাবে এটি করব (এবং আরও ভাল উপায় থাকতে পারে?)

এমনকি যদি ইউনিক্স কমান্ডগুলির ক্ষেত্রে কেস-ইনসেনসেটিভ সুইচ রয়েছে, আমি পিএইচপি ব্যবহার করছি, সুতরাং সমস্ত ফাইল-সিস্টেম কমান্ডের ক্ষেত্রে সংবেদনশীলতার বিকল্প নেই।


2
দেখুন একটি অনুরূপ পূর্ববর্তী প্রশ্ন । আমি এখানে একটি সহজ উত্তর পোস্ট করেছি কারণ প্রশ্নটি কিছুটা সুনির্দিষ্ট।
গিলস 'অশুভ হওয়া বন্ধ করুন'

উত্তর:


8

আপনার ইউনিক্স-গন্ধটির একটি আছে কিনা আমি জানি না rename। অনেকগুলি লিনাক্স রয়েছে এবং এটি কোনও পার্ল-প্যাকেজের অংশ, যদি আপনি কোনও সন্ধানের সন্ধান করেন।

find ./ -depth -exec rename -n 'y/[A-Z]/[a-z]/' {} ";"

সঙ্গে সংস্করণ উপরে

rename -n 

সত্যই ক্রিয়াটি সম্পাদন করে না, তবে কেবল কী করা হবে তা মুদ্রণ করুন। বাস্তবের জন্য এটি করতে আপনি বাদ দিন।


'ভাষা' বা রেজেক্সের 'y/[A-Z]/[a-z]/'অংশটি কী?
ব্যবহারকারী 394

ঠিক আছে, যেহেতু renameএকটি perlপ্যাকেজের অংশ , তাই আমি পার্ল অনুমান করি তবে প্যাটার্নটি sedখুব বেশি ব্যবহৃত হয় এবং সম্ভবত এটিও ব্যবহৃত হয় AWK। আমি শুধু sedশান্ত ভাল জানি । আমি অনুবাদ yকরি translateবা অনুবাদ mapকরি তবে চরিত্রটি কোথা থেকে এসেছে তা আমি জানি না।
ব্যবহারকারী অজ্ঞাত

অবশ্যই পার্ল রেজেক্স হতে হবে - গিলস তার উত্তরে বলেছে renameযে পার্ল স্ক্রিপ্ট।
ব্যবহারকারী 394

হ্যাঁ, এবং আপনি ফাইলের নামগুলি সংশোধন করার জন্য পার্ল রেজেক্স ব্যবহার করতে পারেন যা পার্লে লেখা থেকে শেষ হয় না, তবে এটি আরও আকর্ষণীয় প্রশ্ন হতে পারে।
ব্যবহারকারী অজ্ঞাত

9

Zsh

zmv -o-i '(**/)(*)' '$1${2:l}'

ব্যাখ্যা: zmvপ্রদত্ত প্রতিস্থাপন পাঠ্য অনুসারে একটি প্যাটার্নের সাথে মিলে যাওয়া ফাইলগুলির নাম পরিবর্তন করে। হুডের নীচে প্রতিটি কমান্ডের বিকল্পটি -o-iপাস করে (নীচে দেখুন)। প্রতিস্থাপন লেখা, , , ইত্যাদি প্যাটার্ন ধারাবাহিক আলাদা গ্রুপ আছে। অর্থ সমস্ত (উপ) * ডিরেক্টরি, পুনরাবৃত্তভাবে। ফাইনালটি কোনও প্রথম বন্ধনীযুক্ত গ্রুপ নয় তবে কেবলমাত্র ডিরেক্টরিগুলির সাথে মেলে অর্থ গ্লোব কোয়ালিফায়ার। লোয়ারকেসে রূপান্তরিত হয়।-imv$1$2**(/)${2:l}$2

পার্ল নামকরণ

এখানে আমি পার্লের পুনর্নামকরণ স্ক্রিপ্টটি ব্যবহার করি যা ডেবিয়ান এবং উবুন্টু শিপ করে /usr/bin/prename(সাধারণত renameপাশাপাশি উপলব্ধ )। বাশ ≥4 বা zsh সহ:

shopt -s globstar  # only in bash
rename 's!/([^/]*/?)$!\L/$1!' **/*

অন্যান্য শাঁস সহ:

find . -depth -exec rename -n 's!/([^/]*/?)$!\L/$1!' {} +

সুবহ

recursively:

find . -depth -exec sh -c '
    t=${0%/*}/$(printf %s "${0##*/}" | tr "[:upper:]" "[:lower:]");
    [ "$t" = "$0" ] || mv -i "$0" "$t"
' {} \;

ব্যবহারের বিষয়টি -depthনিশ্চিত করে যে গভীরভাবে নেস্ট করা ডিরেক্টরিগুলি তাদের পূর্ব পুরুষদের আগে প্রক্রিয়া করা হবে।


1

এটি নিম্নলিখিত ডিরেক্টরি কাঠামোয় কাজ করে নি:

JKL/
deF/
ABC/DEf
ABC/gHi
ghi/jkL

এখানে কাজ করে এমন একটি উদাহরণ:

for i in `find | sort -r | sed '$d'`; do \
   b=${i%/*}; e=${i##*/}; mv $i $b'/'${e,,}; done

উপর bএবং evars একটি ব্যাখ্যা জন্য :

man bash

তারপরে নিম্নলিখিত কী ক্রম ব্যবহার করুন: /,,Enterbb


0

গৃহীত উত্তরটি আমার পক্ষে কার্যকর হয়নি কারণ এটি একবারে সমস্ত ডিরেক্টরি পরিবর্তন করার চেষ্টা করেছিল। উপরের গিলসের বহনযোগ্য পোর্টেবলের মতো স্ট্যাকেক্সচেঞ্জ-এর উপর আমি আরও একটি সমাধান পেয়েছি: বারামাইন থেকে -
/programming/4268591/unix-rename-files-directories-to-uppercase

আমি এখানে এটি অনুলিপি করেছি:

find . -depth | \
while read LONG; do
   SHORT=$( basename "$LONG" | tr '[:lower:]' '[:upper:]' )
   DIR=$( dirname "$LONG" )
   if [ "${LONG}" != "${DIR}/${SHORT}"  ]; then
     mv "${LONG}" "${DIR}/${SHORT}"
   fi
done

যার কাছে আমি টিআর কমান্ডটি পরিবর্তিত করেছি যেমন: সেড এস / ক্যাট / কুকুর / জি

উপরের লিঙ্কে কোনও ধন্যবাদ বারামিনের কাছে যায় ie

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