ফাইলের নামগুলিতে আমি ঘৃণা করি


61

এটা সহজ. ফাইল নামকরণের সময় লোকেরা স্পেস ব্যবহার করে আমি দাঁড়াতে পারি না। এটি কখনও কখনও কনসোল কমান্ড নষ্ট করে দেয় এবং ls এর আউটপুটকে কুৎসিত করে।

চ্যালেঞ্জটি হ'ল একটি প্রোগ্রাম লিখুন (কেবলমাত্র অক্ষর) which

  1. '_' দ্বারা সরানো বা প্রতিস্থাপন ব্যবস্থাসমূহের সাথে বর্তমান ডিরেক্টরিতে সমস্ত ফাইল (ডিরেক্টরি সহ) ফাইলগুলির নাম পরিবর্তন করে
  2. সংঘর্ষের সময়, আপনাকে একটি অনন্য শনাক্তকারী সংযোজন করতে হবে (আপনার অবধি)
  3. সমস্ত উপ-ডিরেক্টরিতে পুনরাবৃত্তভাবে অবতরণ করে

আপনি ইউনিক্স-স্টাইলের পাথের নাম ধরে নিতে পারেন। উইন্ডোজ মেশিনে কারও এই প্রোগ্রামটির প্রয়োজন হবে?

এটি কোড গল্ফ, সংক্ষিপ্ততম প্রোগ্রামের জয় (# এসসিআই অক্ষর)। যেহেতু আমি স্পেসগুলিকে এত ঘৃণা করি তাই প্রতিটি স্থান দু'বার গণনা করতে হয়।

আপনার ভাষা, স্কোর, প্রোগ্রাম এবং কীভাবে এটি চালানো যায় তার একটি সংক্ষিপ্ত বিবরণ প্রদান করুন।

প্রোগ্রামটি অবশ্যই আমার লিনাক্স মেশিনে যুক্তিসঙ্গত প্রচেষ্টা সহ সংকলন এবং সম্পাদন করতে হবে।

সম্পাদনা: যেমন এটান পরীক্ষার জন্য একটি ফাইল কাঠামোর অনুরোধ করেছে, উপযুক্ত ফাইল ট্রি তৈরি করতে আমি বর্তমানে ব্যবহৃত স্ক্রিপ্টটি এখানে দিচ্ছি:

#!/bin/bash
rm -r TestDir

touchfiles()
{
    touch my_file
    touch my__file
    touch "my file"
    touch "my  file"
    touch " my_file  "
}

mkdir TestDir
cd TestDir

touchfiles

for dir in "Test Sub" Test_Sub "Te stSub" Te_stSub
do
    mkdir "$dir"
    cd "$dir"
    touchfiles
    cd ..
done

22
এটি আসকি চরগুলি ছাড়াই তৈরি সমাধানের জন্য ভিক্ষা করছে।
ডেনিস জাহেরউদ্দিন

50
এখন আমি
হোয়াইটস্পেস

10
@ ব্রুনোজে হোয়াইটস্পেসে এটি করার জন্য আপনাকে প্রথমে ডব্লিউএসে একটি ফাইল অ্যাক্সেস সিস্টেম বিকাশ করতে হবে। আমি মনে করি এটি আসল চ্যালেঞ্জের চেয়ে চ্যালেঞ্জিং হবে।
এনজল

7
কেউ সি / সি ++ সমাধান পোস্ট করার জন্য অপেক্ষা করছে যাতে আমি এটি চুরি করতে, সংকলন করতে, জেরো স্পেস সহ x86 মেশিন কোড হিসাবে হেক্সে পোস্ট করতে পারি! [বা হতে পারে বেস 64)
কে কে কোয়ান

10
আমি ফাইলের নামগুলিতে আন্ডারস্কোরগুলি ঘৃণা করি। ড্যাশ ব্যবহার করুন।
ডক্টর রেব্মু

উত্তর:


10

জেডএস + জিএনইউ কোর্টিলস - 48 বাইট (1 স্পেস)

for x   (**/*(Dod))mv   -T  --b=t   $x  $x:h/${${x:t}// }

এটি অদ্ভুত যে আপনি স্পেস (এএসসিআইআই) স্পেসগুলি ঘৃণা করেন তবে ট্যাব এবং নিউলাইনগুলি দিয়ে ভাল, তবে আমার ধারণা এটি সব ধরণের লাগে।

zmv সংক্ষিপ্তভাবে ফাইলের নামকরণের সমস্যাগুলি সমাধান করে (এবং কেবল কিছুটা অস্পষ্টভাবে)। তবে এটি লক্ষ্যগুলি অনন্য বলে জোর দিয়েছিল; আপনি সহজেই অনন্য প্রত্যয় যুক্ত করতে পারবেন, একটি প্রত্যয় যুক্ত করা দরকার কেবল তখনই প্রয়োজন হয় যখন সমস্ত কাজটি পুনরায় করার দরকার হয়। সুতরাং পরিবর্তে আমি ম্যানুয়ালি লুপ করেছি এবং সংঘর্ষের ক্ষেত্রে অনন্য সনাক্তকারী সংযোজন করতে GNU এমভি- র উপর নির্ভর করি ( --backupবিকল্পটি --no-target-directoryযদি একটি লক্ষ্য একটি বিদ্যমান ডিরেক্টরি হয়, অন্যথায় mvসেই ডিরেক্টরিতে উত্সটি স্থানান্তরিত করে)।

(od)ডিরেক্টরিগুলি তাদের সামগ্রীর (যেমন সন্ধানের মতো -depth) প্রদর্শিত হওয়ার পরে আউটপুটটিকে বাছাই করার জন্য একটি গ্লোব যোগ্যতা অর্জনকারীDগ্লোব মধ্যে ডট ফাইল অন্তর্ভুক্ত। :hএবং :tহয় ইতিহাস সংশোধনকারীদের অনুরূপ dirnameএবং basename

mvঅভিযোগ করে যে এগুলি ফাইলগুলিকে নিজের নামে পুনরায় নামকরণ করার জন্য ডাকা হয়, কারণ গ্লোবতে ফাঁকা ছাড়াই ফাইলের নাম অন্তর্ভুক্ত রয়েছে। সি'স্ট লা ভি।

অবরুদ্ধ সংস্করণ:

for x in **/*\ *(Dod); do
  mv --no-target-directory --backup=numbered $x ${x:h}/${${x:t}// /}
done

1
এটি আমার ফাইলগুলির নাম পরিবর্তন করে না!
এম হারজক্যাম্প

@ এম হারজক্যাম্প ওহ, ঠিক আছে, এর zmvআগে বোমা ফাটিয়ে যাওয়ার mvসাথে সংঘর্ষের বাছাইয়ের সুযোগ রয়েছে। ঠিক আছে, আমি নিজে এটি করছি। আমি ডট ফাইলগুলি এড়িয়ে গেলে এমনকি যদি না করি তবে একটি অক্ষরও সংরক্ষণ করি তবে ঠিক একই দৈর্ঘ্য হতে দেখা যাচ্ছে।
গিলস

1
এখন এটি কাজ করছে। বিটিডাব্লু: আমি এমন সময়ে স্পেস পেনাল্টি অন্তর্ভুক্ত করেছি যেখানে স্পেসগুলির বিরুদ্ধে আমার সত্যিই বিরক্তি ছিল;) বিদ্রূপজনকভাবে, আমি যখন চ্যালেঞ্জটি পোস্ট করি তখন ফাঁকা স্থান বাদ দিতাম না: পি
এম হারজক্যাম্প

13

116 বাইট, 16 স্পেসে বাশ দিন

find . -depth -exec bash -c 'B=${0##*/}
M="${0%/*}/${B// /_}"
while [ -e "$M" ]
do M=$M.
done
mv "$0" "$M"' {} \;

আরও কয়েকটি বাইট পেতে আমি ত্রুটিগুলি দমন করিনি। এটির কোনও সংঘর্ষ হবে না।

যদি নন-পিক্সস জিএনইউ findআশা করা যায় তবে এটি আরও ছোট করা যেতে পারে:

110 বাইট, 15 স্পেসে বাশ করুন

find -d -exec bash -c 'B=${0##*/}
M="${0%/*}/${B// /_}"
while [ -e "$M" ]
do M=$M.
done
mv "$0" "$M"' {} \;

স্থানগুলি প্রতিস্থাপনের পরিবর্তে অপসারণ করে দুটি কম বাইট ব্যবহার করা হয়:

108 বাইট, 15 স্পেসে বাশ করুন

find -d -exec bash -c 'B=${0##*/}
M="${0%/*}/${B// }"
while [ -e "$M" ]
do M=$M.
done
mv "$0" "$M"' {} \;

দ্রষ্টব্য: যদি ফাঁকা জায়গাগুলির পরিবর্তে ট্যাবগুলি ব্যবহার করা যায়, তবে কেবলমাত্র 1 টি স্থানের প্রয়োজন (লাইন 2-তে প্রতিস্থাপনের জন্য ম্যাচের নিয়মের একটিটি)।

ডাবলকে ডাবল উদ্ধৃতিতে বাগ সন্ধান করার জন্য ধন্যবাদ (এবং সমাধান সরবরাহ করার জন্য)


11
আমাকে উপহাস করার জন্য কি আরও একটি স্পেস স্পেস রয়েছে ??? ;-)
এম হারজক্যাম্প

@ এম হারজক্যাম্প আমি যদিও এটি একটি অনুলিপি এবং পেস্ট ত্রুটি ছিল, তবে এটি আসলে সেখানে রয়েছে। অনুমান আমি আরও 2 পয়েন্ট অর্জন। এছাড়াও, -depthজিএনইউতে এটি প্রতিস্থাপন করা যেতে পারে -d, যদিও এটি অভিযোগ করে যে এটি হ্রাস করা হয়েছে। আমি গল্ফের নিয়ম সম্পর্কে জানি না, আমি কি এটি করতে পারি?
pqnet

2
যতক্ষণ এটি কাজ করে, আমি এটি অনুমতি দিই। ভবিষ্যতের সংস্করণে যদি
অবমূল্যায়নটি

2
ফাইলের কোনওর একটিতে ডাবল উদ্ধৃতি থাকলে এটি সঠিকভাবে কাজ করবে না। এটি ঠিক করার জন্য, আপনি bash -c 'B=${0##*/}...' {} \;পরিবর্তে ব্যবহার করতে পারেন যা আসলে খাটো।
ডেনিস

3
আমার ধারণা আমি সেই লোকই হব, Nভেরিয়েবলের কী হবে? এটি কখনই সংজ্ঞায়িত হয় না ...
স্টিভেন পেনি

9

পাইথন 180 বাইট

from    os  import*
t,c,h='.',chdir,path
def g(p):
    c(p)
    for x   in  listdir(t):
        if h.isdir(x):g(x)
        n=x.replace(' ','')
        while h.exists(n):n+=t
        if' 'in x:rename(x,n)
    c(t*2)
g(t)

ইনডেন্টেশনের জন্য আপনি যদি ট্যাব ব্যবহার করেন তবে কেবল 2 স্পেস :-)


আমার ধারণা অন্যান্য উত্তরগুলির বেশিরভাগই ফাঁকা জায়গাগুলির পরিবর্তে ট্যাব ব্যবহার করে তাদের স্কোরকে উন্নত করতে পারে।
কাস্পারড

কিন্তু আপনার জমাটি স্পেস ব্যবহার করে না? (কাজের কোডের জন্য +1)
এম হার্জক্যাম্প

উত্তরে আমি কীভাবে ট্যাব চরিত্রগুলি গ্রহণ করব তা জানি না ...
ইমানুয়েল পাওলিনী

2
ট্যাবগুলির সাথে প্রতিস্থাপন করা হয়েছে :-)
ইমানুওল পাওলিনী

3
কত কুৎসিত ... ঠিক আছে, আমি অনুমান করি আমি এর জন্য জিজ্ঞাসা করেছি :(
এম হার্জক্যাম্প

5

যদি সংঘর্ষযুক্ত ফাইল প্রত্যয়ের ক্রমটি পূর্ব-বিদ্যমান ফাইলটির নজির দেওয়ার প্রয়োজন না হয় তবে নিম্নলিখিতটি আমার জন্য কাজ করে:

বাশ / সন্ধান / এমভি 84 বাইট, 16 স্পেস

find -depth -execdir bash -c '[ "${0//[^ ]}" ] && mv -{T,--b=t} "$0" "${0// }"' {} \;

বাশ / সন্ধান / এমভি 82 বাইট, 14 স্পেস

find -depth -execdir bash -c '[ "${0//[^ ]}" ]&&mv -{T,-b=t} "$0" "${0// }"' {} \;

&&দুটি স্পেস বাইট সংরক্ষণ করতে আটকে আছে।

বাশ / সন্ধান / এমভি 60 বাইট, 11 স্পেস

find -d -execdir bash -c 'mv -{T,-b=t} "$0" "${0// }"' {} \;

ত্রুটি সুরক্ষা ড্রপ করে যাতে এটি এমভি থেকে ত্রুটি পায় এমন ফাইলগুলিতে যা দিয়ে শুরু করার মতো কোনও স্থান নেই।

সম্পাদনা করুন: {}ডেনিসের অনুস্মারক অনুসারে উদ্ধৃতিগুলি ড্রপ করে । findসংক্ষিপ্ত সংস্করণে পোর্টেবিলিটি এবং অবমূল্যায়ন সম্পর্কে চিৎকার করার অনুমতি দেওয়া হয়েছে যেখানে mvইতিমধ্যে নিজের উপর একটি ফাইল সরানোর বিষয়ে চিৎকার করছে।

সম্পাদনা 2: pqnet দ্বারা নির্দেশিত হিসাবে নামকরণের পরিবর্তে নেস্টিং ডিরেক্টরিগুলি এড়ানোর -Tজন্য mvকমান্ডে যুক্ত হয়েছে । কেবলমাত্র একটি স্থান ব্যবহার করে একটি অক্ষরের ব্যয়ে ব্রেস সম্প্রসারণ ব্যবহৃত হয়।


আপনি এর -dপরিবর্তে ব্যবহার করতে পারেন -depthএবং আপনার চারপাশের উদ্ধৃতিগুলির প্রয়োজন নেই {}
ডেনিস

@ ডেনিস ইয়ে আমি -dপিকনেটের উত্তরে কথোপকথনটি দেখেছি তবে বুঝতে mvপেরেছিলাম যে আমি চিৎকার চেঁচামেচি করছি আমি চিৎকারটি এড়াতে চাই find। যদিও আমার সম্ভবত এটি চিৎকারের জন্য ছোট করা উচিত। এবং হ্যাঁ, আমি সবসময় {}কিছু কারণে উদ্ধৃত করি যদিও আমি জানি যদিও আপনাকে এই ক্ষেত্রে করতে হবে না। অভ্যাস বল আমার অনুমান।
ইটান রেইজনার

1
ডিরেক্টরি নামগুলিতে যখন সংঘর্ষ হয় তখন এটি একে অপরের মধ্যে প্রবেশ করে (এবং স্ট্রিপ স্পেস নয়)। এটি এড়াতে -Tবিকল্পটি ব্যবহার করুনmv
পিকনেট

এটি কাজ করে, এবং আমি চ্যালেঞ্জটিতে বলেছিলাম যে পরিশিষ্ট আপনার হাতে। +1
এম হারজক্যাম্প

4

নোডজেএস - 209 বাইট, 3 সাদা স্থান

s=require('fs');function a(d){s.readdirSync(d).forEach(function(f){f=d+'/'+f;i=0;r=f;if(/ /.test(f)){r=f.replace(' ','');while(s.existsSync(r))r+=i++;s.renameSync(f,r)}s.statSync(r).isDirectory()&&a(r)})}a('.');

আমি নোড.জেএস এর সাথে পরিচিত নই আমি কীভাবে এটি চালাব?
এম হারজক্যাম্প

আপনার নোড এক্সিকিউটেবল নোডেজের প্রয়োজন হবে ; এটি একটি ফাইলে সংরক্ষণ করুন এবং চালানnode file.js
cPu1

7
আমি একটি ব্যতিক্রম পেতে TypeError: Object #<Object> has no method 'exists'। অনুমান কোথায়: এটি 1 লাইনে! : ডি
এম.হিরজক্যাম্প

আমি এটি পরীক্ষা করেছি। যাইহোক, আমি এর সিঙ্ক্রোনাস সমমনা অংশের সাথে বিদ্যমানটিকে প্রতিস্থাপন করেছি। আপনি এখন চেষ্টা করতে পারেন?
সিপিই 1

1
আমি কেবল 0.6.12 সংস্করণ ইনস্টল করেছি। সমস্যা হতে পারে।
এম হার্জক্যাম্প

2

বাশ - 86 বাইট

find    .   -d|while    IFS=""  read    f;do    t=${f##*/};mv   --b=t   -T  "$f"    "${f%/*}"/${t// /};done


2
এছাড়াও, স্পেসগুলি দু'বার গণনা করা হয় ;-)
এম হারজক্যাম্প

আপনার স্পেসের সাথে ঠিক কী বোঝানো হচ্ছে দুবার গণনা করা হয়?
সুবহে

1
আপনি কাটছাঁট দ্বারা অক্ষরের অনেক সঞ্চয় করতে পারেন --backupথেকে--b

1
হ্যাঁ, এখন এটি আমার পরীক্ষার পাশাপাশি কাজ করে! +1
এম হার্জক্যাম্প

2

বাশ + পার্ল rename64

( renameডেবিয়ান এবং ডেরিভেটিভসের পার্ল স্ক্রিপ্ট, ইউট-লিনাক্স কমান্ড নয়।)

find . -depth -name "* *" -execdir rename 'y/ /_/' * \;

11
"আমার file.txt" এবং "my_file.txt" উভয় উপস্থিত থাকলে কী হবে?
এম হারজক্যাম্প

1
ওহ সত্য .. খুব শীঘ্রই
এটির

1
*হওয়া উচিত {}, কারণ এটি কেবলমাত্র ফাইলগুলির নাম পরিবর্তন করে যার নাম বর্তমান ডিরেক্টরিতে প্রদর্শিত হয়। এটি সংঘর্ষের ক্ষেত্রে প্রত্যয় যুক্ত করে না। আপনি বাদ দ্বারা বেশ একটু বাঁচাতে পারে -name "* *"যেহেতু renameচুপটি ফাইল যার নাম রুপান্তরিত করা হয় না উপেক্ষা করে।
গিলস

2

পসিক্স sh+ জিএনইউ find+ জিএনইউ mv67 এএসসিআইআই বাইট + এক (আক্ষরিক) স্পেস

find    -d  -exec   sh  -cf 'IFS=\ ;IFS=_   set $0;mv   --b=t   "$0"    "$*"'   {}  \;

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

এটি কেবল ক্ষেত্রগুলি পৃথক করতে অভ্যন্তরীণ ক্ষেত্র বিভাজক ব্যবহার করে।

এটা মোটামুটি ... চটি ...

...ওহ মানুষ. আমি জানতাম ট্যাব জিনিসটি সস্তা, তবে আমি ভেবেছিলাম এটি কমপক্ষে চালাক। এখন আমি পার্টিতে দেরি করেছি ...


এটি আমার পরীক্ষার সেটে আপনার ইচ্ছা অনুসারে কাজ করে, তবে চ্যালেঞ্জের প্রয়োজন মতো নয়। যদিও আমি এটি পছন্দ করি, কারণ আমি সম্ভবত নতুন কিছু শিখব। আমি মনে করি আমাকে এই IFSম্যাজিক জিনিসটি পড়তে হবে ...
এম হারজক্যাম্প

1
@ এম হারজক্যাম্প - হোয়াইটস্পেসে সেট করা আছে কি না তার উপর নির্ভর করে ifs আলাদা আচরণ করে। বেশিরভাগ লোকেরা এটিকে ঘৃণা করে কারণ তারা এর দুটি প্রাথমিক গুণাবলী বুঝতে পারে না - এটি কেবল প্রসারিত ( $expandনা (প্রাক্তন প্যান্ড)) এবং ইফএসউজের জিনিসটির উপরে সুনির্দিষ্টভাবে কাজ করে। দেখুন এখানে
mikeserv

এটি ডিরেক্টরিগুলির ভিতরে ফাইলগুলির নাম পরিবর্তন করে না যার নামগুলিতে স্পেস রয়েছে। একটি স্থির -execসঙ্গে প্রতিস্থাপন করা হবে -execdirIFSআপনি যে উল্লেখ করছেন না তার অন্য কোন তাত্ক্ষণিক স্থানটি মুছে ফেলা হয়েছে। মনে রাখবেন যে অন্যরা যেমন লক্ষ্য করেছে যে আপনারও সেইসাথে -Tবিকল্পের প্রয়োজন mv, যখন কোনও mvকলটির লক্ষ্য একটি বিদ্যমান ডিরেক্টরি থাকে।
গিলস

@ গিলস - আমার পছন্দ হ'ল হার্ডলিংকের একটি মিরর গাছটি তৈরি করার জন্য এবং তারপরে সেগুলি পরিচালনা করার জন্য sh -c 'mkdir -p ../newtree/"$0"; ln "$0"/* ../newtree/$0 {} \;একটি find -type dআদেশে অন্যান্য গ্লোবগুলি ব্যবহার করা, তবে আমি মুভ অপারেশনের জন্য কোনও কোড-গল্ফ লিখতে দ্বিতীয়-অনুমান করছি। শীর্ষস্থানীয় / পিছনের জায়গাগুলি সম্পর্কে ভাল বক্তব্য, যদিও আমি মনে করি এটি আমার পছন্দ মতো আচরণও।
মাইকজার্ভ

@Gilles - কিন্তু প্রণালী দ্বারা, এটি একটি নয় ছল - এটি একটি উদ্দেশ্যে এবং মান নিয়ন্ত্রিত আচরণ। ফিল্ড সূক্ষ্মাতিসূক্ষ্ম বিভাগে খুব শেল বৈশিষ্ট যে শব্দ ধারণ করে না কয়েক মধ্যে অনির্দিষ্ট বা বাস্তবায়ন-সংজ্ঞায়িত । সেখানে এই ধরনের কোন গ্যারান্টি নেই zsh'র builtin ফাংশন zmv উদাহরণস্বরূপ।
মাইকজারভেল

2

পিএইচপি, 147 145 বাইট, 2 1 স্পেস গুলি -> 146

function    s(){foreach(glob("*")as$n){is_dir($n)&&chdir($n)&s()|chdir("..");if($n<$r=strtr($n," ",_)){while(file_exists($r))$r.=_;rename($n,$r);}}}

পুনরাবৃত্তি ফাংশন। সাথে চালাওs(".");

globপ্রদত্ত পথের জন্য ফলাফলগুলি লুপ করুন :

  • ডিরেক্টরি যদি, পুনরাবৃত্তি
  • আন্ডারস্কোর দিয়ে স্পেসগুলি প্রতিস্থাপন করুন
  • স্ট্রিং যদি পৃথক হয়
    • নতুন ফাইলের নাম নেওয়ার সময়, আন্ডারস্কোর যুক্ত করুন
    • ফাইল / ডিরেক্টরি নামকরণ

পিএইচপি সার্ভারে ফাইলগুলির নাম বদলে দেবে ... এখন আমি অবাক হয়েছি যে কোনও ক্লায়েন্ট যখনই তারা আপনার সাইটে যান তাদের ফাইলের নাম কীভাবে পরিবর্তন করবেন: ডি
এমহেরজক্যাম্প

1

রুবি 121

require 'find'

Find.find('.') do |file|
  if file.chomp.match(/ /)
    File.rename(file, file.gsub(/ /, '_'))
  end
end

6
কোড গল্ফ স্বাগতম! এই কোড-গল্ফ চ্যালেঞ্জগুলির মধ্যে এখানে ধারণাটি হ'ল সংখ্যক অক্ষর ব্যবহার করা। এটার মানে হল যে আপনি স্পষ্টভাবে ফাঁকা রেখা এবং ট্যাব পরিত্রাণ পেতে পারেন, এবং পরিবর্তনশীল নামের একক চরিত্র করতে, কিন্তু মানুষ জন্য চেহারা সমস্ত প্রকারের এর সৃজনশীল উপায়ে অক্ষর সংখ্যা কমাতে।
চার্লস

আমি একটি ত্রুটি পেয়েছি, যে ডিরেক্টরিটি খালি নয়:gam3.rb:5:in `rename': Directory not empty - ./Te stSub or ./Te_stSub (Errno::ENOTEMPTY) from gam3.rb:5 from /usr/lib/ruby/1.8/find.rb:39:in `find' from /usr/lib/ruby/1.8/find.rb:38:in `catch' from /usr/lib/ruby/1.8/find.rb:38:in `find' from gam3.rb:3
এম হারজক্যাম্প

1

পাইথন, 187

165, প্লাস ফাঁকা জন্য পেনাল্টি পয়েন্ট 22।

from os import*
u='_';j=path.join
for t,d,f in walk('.',0):
 for z in f+d:
  n=z.replace(' ',u)
  if n!=z:
   while path.exists(j(t,n)):n+=u
   rename(j(t,z),j(t,n))

166, ইমানুয়েলের কৌশল কৌশলটি ব্যবহার করে :

এই একটিতে কেবল একটি স্থান!

from    os  import*
u='_';j=path.join
for t,d,f   in  walk('.',0):
    for z   in  f+d:
        n=z.replace(' ',u)
        if  n!=z:
            while   path.exists(j(t,n)):n+=u
            rename(j(t,z),j(t,n))

এটি আমার পক্ষে কাজ করে। +1
এম হার্জক্যাম্প

লাইনের শুরুতে স্পেসগুলি সরিয়ে ট্যাবগুলি ব্যবহার করুন - এগুলি কোনও স্পেস নয় তাই কেবল একবার গণনা করুন
chill0r

@ chill0r দ্বিতীয় সংস্করণ এটাই; সমস্ত শূন্যস্থানগুলি একটি ব্যতীত ট্যাবগুলির সাথে প্রতিস্থাপিত হয় (এসও ব্যতীত এগুলি স্পেস হিসাবে প্রদর্শন করে)।
হেনরি কিটার

1

লাইভস্ক্রিপ্ট - 166

(ট্যাবগুলি দিয়ে স্পেসগুলি প্রতিস্থাপন করুন))

(a=->(s=require \fs)readdirSync(it)map (f)->f=it+'/'+f;r=f.replace /\s/g,i='';(while f!=r&&s.existsSync r=>r+=i++);s.statSync(f)isDirectory(s.renameSync f,r)&&a r) \.

উপর ভিত্তি করে nderscore এর অপ্টিমাইজ সংস্করণ এর cPu1 এর উত্তর


কাজ করে! +1 এই পোস্টটি পরিষ্কার করার জন্য আমি আমার মন্তব্যগুলি মুছতে চলেছি।
এম হারজক্যাম্প

0

বাশ 4+ 111 বাইট

shopt -s dotglob globstar
for f in **
do
n=${f// /}
while [[ $f != $n && -e $n ]]
do n+=1
done
mv "$f" $n
done

1
বেশ কয়েকটি অন্যান্য এন্ট্রি হিসাবে একই সমস্যা: আপনি প্যারেন্ট ডিরেক্টরিতে স্থানগুলি প্রতিস্থাপন করেন এবং এমভি সেগুলি খুঁজে পেতে পারে না। এছাড়াও আপনাকে অবশ্যই ট্র্যাভার্সনের দিক পরিবর্তন করতে হবে, অন্যথায় আপনি ডিরেক্টরিগুলির নাম পরিবর্তন করেন এবং এমভি ভিতরে ফাইলগুলি খুঁজে পায় না।
এম হারজক্যাম্প

0

গ্রোভি, ১৩৯ টি অক্ষর

def c
c={
f->
def g=new File(f.parent,f.name.replaceAll('\\s',''))
f.renameTo(g)
!g.directory ?: g.eachFile(c)
}
new File('.').eachFile(c)

@ edc65 মন্তব্য অনুসারে

গ্রোভি, হ্যান্ডেল সংঘর্ষগুলি, 259 টি অক্ষর

def c
c={
p,l,f->
def g=new File(p,f.name.replaceAll('\\s',''))
f==g?:
(g.exists()?f.renameTo(g.toString()+l.indexOf(f.name)):f.renameTo(g))
!g.directory?:g.eachFile(c.curry(g,g.list().toList()))
}
def r=new File('.')
r.eachFile(c.curry(r,r.list().toList()))

1
এটি সংঘর্ষগুলি পরিচালনা করে না।
edc65

তাদের পিতামাতার ডিরেক্টরিগুলির আগে ফাইলগুলির নাম পরিবর্তন করা হয়েছে এবং পিতামহিত ডিরেক্টরিতে স্থানগুলি স্থানান্তরিত হয়নি তা নিশ্চিত করুন।
এম হারজক্যাম্প

আমি নিশ্চিত যে এটি ঠিক আছে
লগইন করুন

0

পসিক্স (zsh এ পরীক্ষিত) + বেসিক লিনাক্স 151 কমান্ড

export IFS='
'
for f in $(ls -R1);do export n=$(echo $f|tr ' ' '_');yes n|mv $f $n || yes n|mv $f `echo $n;echo $f|md5sum`
done

@ এম হার্জক্যাম্প ফিক্সড।
লিনজিক

বেশ কয়েকটি বিষয়: রফতানি আইএফএস এবং সিএস-সিআর সি-র কাজ কী? এবং --reply বিকল্পের জন্য আপনার mv এর কোন সংস্করণ প্রয়োজন? (আমার কাছে 8.13 রয়েছে এবং এটি বিকল্পটিকে স্বীকৃতি দেয় না)। আরও ভাল স্কোর পাওয়ার জন্য আপনার ভেরিয়েবলের নাম সংক্ষেপণ করা উচিত।
এম হারজক্যাম্প

সি নতুন লাইনের সাথে স্পেসগুলি প্রতিস্থাপন করে। আইএফএস স্প্রেসগুলি বিভাজক হওয়া বন্ধ করে দেয়। --Reply পুরানো সংস্করণ থেকে এবং প্রায় ঠিক করা হয়েছে।
লিনজিক

1
আপনি 5 নং লাইনে একটি দ্বিতীয় এমভি মিস করছেন? এবং আমি মনে করি line লাইনের একটি প্রতিধ্বনি ভুল।
এম হারজক্যাম্প

1
$(ls -CR)সম্পূর্ণ জালিয়াতি। -cবিকল্প অনর্থক আর -Rতাদের ডিরেক্টরির, যা অর্থহীন হয় ছাড়া আপনি ফাইল পায়। আপনার আর্কিটেকচার মৌলিকভাবে নতুন লাইনের সমন্বিত ফাইলের নামগুলি পরিচালনা করবে না। আপনার দরকার আছে set -fবা অন্যথায় ওয়াইল্ডকার্ডযুক্ত ফাইলের নামগুলি বিস্ফোরিত হবে। exportঅকেজো ফাইলগুলিকে আলাদা করার জন্য আপনি কী করার চেষ্টা করছেন তা আমি অস্পষ্টভাবে দেখতে পারি, তবে পাইপিংটি ভুল।
গিলস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.