টার্মিনাল দিয়ে একাধিক ফাইল কীভাবে তৈরি করবেন?


46

আমি সিতে একটি দুর্দান্ত শীতল সূচনা বই দিয়ে প্রোগ্রাম শিখছি এবং আমি প্রতিটি উদাহরণ এবং কাজ লিখেছি যাতে আমি হৃদয় দিয়ে বাক্য গঠন শিখতে পারি। আমি এখন পর্যন্ত প্রতিটি ফাইল ম্যানুয়ালি করেছি, তবে ক্লিক, নামকরণ এবং সংরক্ষণ ক্লান্তিকর হয়।

আমি একাধিক ফাইল তৈরি করতে একটি উপায় প্রয়োজন bspl0001.c, bspl0002.c, bspl0003.c, ইত্যাদি এবং তাদের ডিরেক্টরির "learning_c" বা কিছু সংরক্ষণ।

আমি উবুন্টু / লিনাক্সের একটি নূb় এবং সত্যই কেবল ভার্চুয়ালবক্সের মাধ্যমে এটি চালাচ্ছি কারণ আইডিই জিনির সেট আপ করা সহজ ছিল। সুতরাং, টার্মিনাল কীভাবে কাজ করে তা আমি সত্যিই জানি না।

সম্পাদনা আমি সবেমাত্র আমার এই পুরানো অ্যাকাউন্টে পেয়েছি এবং কেন আমি কখনই হৃদয় দিয়ে কোডের বাক্য গঠন শিখতে চাই তা সম্পর্কে মাথা নাড়ছি। আনন্দের সাথে যথেষ্ট, আমি আমার সিএস / ম্যাথ বিএসসি স্টাডিজ প্রায় শেষ করেছি। দুর্যোগে সহায়তার জন্য অনেক ধন্যবাদ!


1
কেন একবারে সব ফাইল তৈরি করবেন? আমি আসলে যা ব্যবহার করছি: 1 তে একটি কী সংমিশ্রণ টিপুন 1 আমার কোড ডিরেক্টরিতে "পরবর্তী" ফাইলটি কী হওয়া উচিত তা দেখুন, 2. সঠিকভাবে নামযুক্ত ফাইলটি তৈরি করুন (শেবাং সহ) এবং ৩. এটি আমার সম্পাদকটিতে খুলুন (আমার ক্ষেত্রে) নিষ্ক্রিয়)। সব এক কিপ্রেসে। এইভাবে আপনি প্রচুর (এখনও) অব্যবহৃত ফাইল প্রতিরোধ করবেন।
জ্যাকব ভ্লিজম

উত্তর:


77

আপনি এই আদেশগুলি দিয়ে এটি করতে পারেন:

mkdir learning_c
cd learning_c
touch bspl{0001..0003}.c

ব্যাখ্যা:


  • mkdir learning_c

    • এটি learning_cবর্তমান ফোল্ডারে কল করা একটি ফোল্ডার তৈরি করবে
    • বর্তমান ফোল্ডারটি সাধারণত আপনার হোম ফোল্ডারটিকেও বলা হয় ~
    • আপনি cdকমান্ডটি ব্যবহার করে বর্তমান ডিরেক্টরি পরিবর্তন করতে পারেন (যেমন cd Desktop)
  • cd learning_c

    • হ্যাঁ, আপনি এটি অনুমান করতে পারেন, আপনি নতুন তৈরি ফোল্ডারে প্রবেশ করছেন
  • touch bspl{0001..0003}.c

    • touchখালি ফাইল তৈরি এবং টাইমস্ট্যাম্পগুলি সংশোধন করার একটি সরঞ্জাম; আমরা খালি ফাইল তৈরি করছি।
    • touch myfileকল করা একটি খালি ফাইল তৈরি করবে myfile
    • ( bspl{0001..0003}.c) অনুসরণকারী কুশল কোডকে একটি ব্রেস সম্প্রসারণ বলা হয় । এটি bashশেলের একটি দুর্দান্ত বৈশিষ্ট্য যা আপনাকে স্বেচ্ছাসেবী স্ট্রিং সংমিশ্রনের দীর্ঘ তালিকা তৈরি করতে দেয়। আপনি বাশ হ্যাকার্স উইকিতে এটি সম্পর্কে আরও শিখতে পারেন । এই ক্ষেত্রে আপনি পরামিতিগুলির একটি দীর্ঘ তালিকা তৈরি করবেন touch। আপনি এর দীর্ঘ সমতুল্য ব্যবহার করতে পারেন:

      touch bspl0001.c bspl0002.c bspl0003.c
      
    • আপনি ফাইলের সংখ্যা পরিবর্তন করতে পারেন: আপনি 12 টি ফাইল চাইলে চালাতে পারেন bspl{0001..0012}.c

    • নেতৃস্থানীয় শূন্যগুলি ( 0012পরিবর্তে 12) তা নিশ্চিত করুন যে আউটপুট শূন্য প্যাডযুক্ত 4 টি সংখ্যা ব্যবহার করে।

4
পর্যায়ক্রমে, কিছু কীস্ট্রোক সংরক্ষণ করতে,touch bspl000{1..3}.c
রিড করুন

1
@ রিড: এবং যদি হেরিওস 10 বা ততোধিক ফাইল চায় তবে কী হবে?
হেলিও

3
যারা একই touch {test,tes2,tes3}.js
রিক

1
@ রিক: আমি কি উত্তর দিচ্ছি না? ;-) । আপনার কোড সরল করা যেতে পারে:touch tes{t,2,3}.js
হেলিও

1
এবং আপনি এটি একটি কমান্ড লাইনেও করতে পারেন: k এমকিডির লার্নিং_সি; সিডি লার্নিং_সি; স্পর্শ বিএসপিএল 1000 {1,2,3,4 c .সি। দ্য ";" আপনাকে কমান্ডগুলি যুক্ত করতে সহায়তা করবে যা একের পর এক ক্রম কার্যকর করবে।
পাভলোস থিয়োডোরো

4

একটি শর্টকাট কী সংমিশ্রণ সহ সঠিকভাবে সংখ্যাযুক্ত (পরবর্তী) ফাইল তৈরি করুন

কেন একবারে সব ফাইল তৈরি করবেন? অসুবিধাটি হ'ল আপনার কাছে প্রচুর খালি এবং অব্যবহৃত ফাইল থাকবে। আমি আসলে যা ব্যবহার করছি: এখানে একটি কী সংমিশ্রণ টিপুন:

  1. আমার কোড ডিরেক্টরিতে একটি স্ক্রিপ্ট দেখুন "পরবর্তী" ফাইলটি কী হওয়া উচিত,
  2. সঠিকভাবে নামযুক্ত ফাইল তৈরি করুন (শেবাং সহ) এবং
  3. আমার সম্পাদকটিতে নতুন ফাইলটি খুলুন (আমার ক্ষেত্রে অলস)।

সব এক কিপ্রেসে। এইভাবে আপনি প্রচুর (এখনও) অব্যবহৃত ফাইলগুলি প্রতিরোধ করেন; আপনার প্রয়োজন হলে ফাইলগুলি তৈরি করা হয়।

নীচে একটি সরলীকৃত সংস্করণ (পদক্ষেপ 3 চলছে না)। প্রতিটি কিপ্রেসে এটি সঠিকভাবে সংখ্যাযুক্ত ফাইল তৈরি করবে:

bspl0001.c, bspl0002.c, bspl0003.c etc
#!/usr/bin/env python3
import os
#--- set your code directory below
dr = "/path/to/your/coding_files"
#--- set the desired (base) name extension and shebang below (leave it ""if you don't want an automatically set shebang)
name_initial = "bspl"
extension = ".c"
shebang = ""
#---

existing = os.listdir(dr)
n = 1
while True:
    file = dr+"/"+name_initial+str(n).zfill(4)+extension
    if os.path.exists(file):
        n = n+1
    else:
        with open(file, "wt") as out:
            out.write(shebang)
        break

কিভাবে ব্যবহার করে

  1. একটি ফাঁকা ফাইলে স্ক্রিপ্টটি অনুলিপি করুন
  2. প্রধান বিভাগে, আপনার ডিরেক্টরিতে পথ নির্ধারণ করুন (এবং alচ্ছিক: বেস নাম এবং / অথবা এক্সটেনশন পরিবর্তন করুন, শেবাং)।
  3. স্ক্রিপ্টটি create_empty.py হিসাবে সংরক্ষণ করুন
  4. একটি শর্টকাট থেকে স্ক্রিপ্টটি চালান: সিস্টেম সেটিংস> কীবোর্ড> কাস্টম শর্টকাট। কমান্ড যুক্ত করুন:

    python3 /path/to/create_empty.py
    

3

আপনি নিম্নলিখিত পাইথন কোডটি ব্যবহার করতে পারেন, আপনার প্রয়োজন অনুসারে এটি পরিবর্তন করতে পারেন।
ফাইলের নাম সহ নিম্নলিখিত কোডটি সংরক্ষণ করুনfilecreator.py

#!/usr/bin/env python
import os
import subprocess
work_path = os.path.abspath(os.path.dirname(__file__))
if not os.path.exists("learning_c"):
    os.mkdir("learning_c")
os.chdir(os.path.expanduser(work_path+"/learning_c"))
n = 10 #put the number as you wish
for i in range(n):
    subprocess.call(['touch', "bsdl"+str(i).zfill(4)+".c"])

এবং তারপরে এটি এই আদেশ দিয়ে কার্যকর করুন:

python filecreator.py

2

উপায়টি bashভাল তবে আপনি যদি এমন শেল নিয়ে কাজ করছেন যা কোঁকড়া ধনুর্বন্ধনী প্রসারণ সমর্থন করে না? উদাহরণস্বরূপ touch file{1..10}আমার জন্য কাজ করে না mksh। শেল নির্বিশেষে তিনটি বিকল্প উপায় এখানে কাজ করে's

SeQ

আরও শেল-নিরপেক্ষ পন্থা seqহ'ল printfবিকল্পগুলির সাথে ফর্ম্যাট করা সংখ্যার ক্রম উত্পন্ন করতে কমান্ড একত্রিত করা এবং xargsকমান্ডে এটি পাস করা । উদাহরণ স্বরূপ,

$ ls -l
total 0
$ seq -f "%04.0f" 10 | xargs -I "{}" touch bspl"{}".c                 
$ ls
bspl0002.c  bspl0004.c  bspl0006.c  bspl0008.c  bspl0010.c
bspl0001.c  bspl0003.c  bspl0005.c  bspl0007.c  bspl0009.c

পার্ল

অবশ্যই, পার্ল, বেশ ওয়াইডস্প্রেড * নিক্স সরঞ্জাম হয়েও এটি করতে পারে। আমাদের এখানে নির্দিষ্ট ওয়ান-লাইনার কমান্ডটি নিম্নরূপ:

perl -le 'do { $var=sprintf("%s%04d.c",$ARGV[0],$_ ); open(my $fh, ">", $var);close($fh) } for $ARGV[1] .. $ARGV[2]' bslp 1 5 

কার্যকরভাবে এখানে যা ঘটে তা হ'ল আমরা 3 টি কমান্ড-লাইন আর্গুমেন্ট নির্দিষ্ট করি: ফাইলের নাম উপসর্গ, সূচনা সূচনা এবং সমাপ্ত সূচক। তারপরে আমরা do { } for $ARGV[1] .. $ARGV[2]সংখ্যার নির্দিষ্ট পরিসরের জন্য পুনরাবৃত্তি করতে ব্যবহার করি । বলুন, $ARGV[1]5 ছিল এবং $ARGV[2]9 ছিল, আমরা 5,6,7,8 এবং 9 এর উপরে পুনরাবৃত্তি করব।

কোঁকড়া ধনুর্বন্ধনী মধ্যে প্রতিটি পুনরাবৃত্তির উপর কি ঘটে? আমরা প্রতিটি সংখ্যার সাথে নির্দিষ্ট করে নিই $_এবং sprintf()ফাংশন ব্যবহার করে একটি স্ট্রিং এম তৈরি করি যা উপসর্গ (প্রথম কমান্ড-লাইন আর্গুমেন্ট, $ARGV[0]) এবং প্রদত্ত সংখ্যাটি printfবিভক্ত করে তোলে তবে 4 টি জিরো (যা বিন্যাসের স্টাইল দ্বারা সম্পন্ন হয়) দিয়ে নম্বরটি পূরণ করে , %04dঅংশ) এবং .cপ্রত্যয়টি সংযুক্ত করুন। প্রতিটি পুনরাবৃত্তির ফলাফল হিসাবে আমরা একটি নাম তৈরি করি bspl0001.c

open(my $fh, ">", $var);close($fh)কার্যকরভাবে হিসাবে কাজ করে touch, কমান্ড নিদিষ্ট নামের একটি ফাইল তৈরি করা।

কিছুটা লম্বা হওয়ার সময় এটি জ্যাকব ভ্লিজমের পাইথন স্ক্রিপ্টের মতো ফ্যাশনে বেশ ভাল অভিনয় করে। এটি চাইলে পাঠযোগ্যতার জন্য কোনও স্ক্রিপ্টে রূপান্তর করা যেতে পারে, যেমন:

#!/usr/bin/env perl
use strict;
use warnings;

for my $i ( $ARGV[1] .. $ARGV[2] ) { 
    my $var=sprintf("%s%04d.c",$ARGV[0],$i ); 
    open(my $fh, ">", $var) or die "Couldn't open " . $var ;
    close($fh) or die "Couldn't close " . $var ;
}

এটি পরীক্ষা করতে দেয়। প্রথমে ওয়ান-লাইনার:

$ ls -l
total 0
$ perl -le 'do { $var=sprintf("%s%04d.c",$ARGV[0],$_ ); open(my $fh, ">", $var);close($fh) } for $ARGV[1] .. $ARGV[2]' bslp 1 5
$ ls -l                                                                                               
total 0
-rw-rw-r-- 1 xieerqi xieerqi 0 2月   5 23:36 bslp0001.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月   5 23:36 bslp0002.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月   5 23:36 bslp0003.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月   5 23:36 bslp0004.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月   5 23:36 bslp0005.c

এবং এখন স্ক্রিপ্ট:

$ ls -l
total 4
-rwxrwxr-x 1 xieerqi xieerqi 244 2月   5 23:57 touch_range.pl*
$ ./touch_range.pl bspl 1 5                                                                           
$ ls -l
total 4
-rw-rw-r-- 1 xieerqi xieerqi   0 2月   5 23:58 bspl0001.c
-rw-rw-r-- 1 xieerqi xieerqi   0 2月   5 23:58 bspl0002.c
-rw-rw-r-- 1 xieerqi xieerqi   0 2月   5 23:58 bspl0003.c
-rw-rw-r-- 1 xieerqi xieerqi   0 2月   5 23:58 bspl0004.c
-rw-rw-r-- 1 xieerqi xieerqi   0 2月   5 23:58 bspl0005.c
-rwxrwxr-x 1 xieerqi xieerqi 244 2月   5 23:57 touch_range.pl*

awk

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

$ awk 'BEGIN{for(i=ARGV[2];i<=ARGV[3];i++){fd=sprintf("%s%04d.c",ARGV[1],i); printf "" > fd;close(fd)}}' bslp 1 5
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.