टर्मिनल के साथ कई फाइलें कैसे बनाएं?


46

मैं सी के लिए वास्तव में शांत परिचयात्मक पुस्तक के साथ कार्यक्रम करना सीख रहा हूं और मैं हर उदाहरण और कार्य को लिखता हूं ताकि मैं दिल से वाक्य रचना सीख सकूं। मैंने अब तक हर फाइल मैनुअली की, लेकिन क्लिकिंग, नेमिंग और सेविंग थकाऊ हो जाती है।

मैं की तरह एक से अधिक फ़ाइलों को बनाने के लिए कोई तरीका होना चाहिए bspl0001.c, bspl0002.c, bspl0003.c, आदि और उन्हें निर्देशिका "learning_c" या कुछ में बचत।

मैं Ubuntu / Linux के साथ एक noob हूँ और ईमानदारी से केवल VirtualBox के माध्यम से इसे चलाता हूं क्योंकि IDE Geany को सेट करना आसान था। इस प्रकार, मैं वास्तव में नहीं जानता कि टर्मिनल कैसे काम करता है।

संपादित करें मैंने अभी अपने आप को मेरे इस पुराने खाते में पाया है और अपने सिर को हिला रहा हूं कि मैं कभी भी दिल से एक कोड सिंटैक्स क्यों सीखना चाहता हूं। मजेदार रूप से पर्याप्त है, मैं लगभग अपने सीएस / गणित बीएससी की पढ़ाई कर रहा हूं। मदद के लिए बहुत बहुत धन्यवाद!


1
एक ही बार में सभी फाइलें क्यों बनाएं? मैं वास्तव में क्या उपयोग कर रहा हूं: 1. कुंजी संयोजन दबाएं 1. मेरी कोड निर्देशिका में देखें कि "अगली" फाइल क्या होनी चाहिए, 2. सही ढंग से नामित फ़ाइल (शेलबैंग सहित) बनाएं और 3. इसे मेरे संपादक में खोलें (मेरे मामले में) निष्क्रिय)। सभी एक कुंजी में। इस तरह से आप बहुत सी (अभी भी) अप्रयुक्त फ़ाइलों को रोकते हैं।
याकूब Vlijm

जवाबों:


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
@ रीड: और क्या होता है यदि Herios 10 या अधिक फाइलें चाहता है?
हेलियो

3
उन लोगों के लिए जो समान विस्तार के साथ फाइलों की एक सूची बनाना चाहते हैंtouch {test,tes2,tes3}.js
रिक

1
@ रिक: क्या मैं जवाब नहीं है? ;-) । आपका कोड सरल किया जा सकता है:touch tes{t,2,3}.js
Helio

1
और आप इसे एक कमांड लाइन में भी कर सकते हैं: $ mkdir learning_c; cd Learning_c; स्पर्श bspl000 {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. हेड सेक्शन में, अपनी डायरेक्टरी (और ऑप्शनल: बेस नेम और / या एक्सटेंशन, शेबंग) को पथ सेट करें।
  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। यहां तीन वैकल्पिक तरीके हैं जो शेल की परवाह किए बिना काम करते हैं।

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]) , और दिए गए नंबर को मिलाता है, लेकिन 4 शून्य के साथ संख्या को भरता है (जो printfस्वरूपण के -स्टाइल द्वारा किया जाता है ,) %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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.