터미널로 여러 파일을 만드는 방법은 무엇입니까?


46

나는 C에 대한 정말 멋진 입문 서적을 사용하여 프로그래밍하는 법을 배우고 있으며 모든 예제와 작업을 작성하여 구문을 마음껏 배울 수 있습니다. 지금까지 모든 파일을 수동으로 수행했지만 클릭, 이름 지정 및 저장이 지쳐집니다.

내가 좋아하는 여러 개의 파일을 생성 할 수있는 방법이 필요 bspl0001.c, bspl0002.c, bspl0003.c, 등 및 디렉토리 "learning_c"또는 뭔가를 절약.

IDE Geany를 쉽게 설정할 수 있었기 때문에 Ubuntu / Linux의 멍청한 사람이며 VirtualBox를 통해서만 정직하게 실행합니다. 따라서 터미널이 어떻게 작동하는지 잘 모르겠습니다.

편집 나는이 오래된 계정에서 나 자신을 발견했으며 왜 내가 마음으로 코드 구문을 배우고 싶어하는지에 대해 머리를 흔들고있다. 재미있게도, 나는 CS / Math BSc 연구를 거의 끝냈습니다. 뒤늦은 도움에 감사드립니다!


1
한 번에 모든 파일을 작성하는 이유는 무엇입니까? 내가 실제로 사용하는 것 : 1. 키 조합을 눌러 1. 코드 디렉토리에서 "다음"파일이 무엇인지 확인하고 2. 올바른 이름의 파일 (shebang 포함)을 생성 한 다음 3. 내 편집기에서 파일을 엽니 다 (필자의 경우) 게으른). 한 번의 키 누르기만으로도 가능합니다. 그렇게하면 사용하지 않는 파일이 많이 방지됩니다.
Jacob 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임의의 문자열 조합의 긴 목록을 만들 수 있는 쉘 의 훌륭한 기능입니다 . Bash Hackers Wiki 에서 이에 대해 더 자세히 배울 수 있습니다 . 이 경우에 전달 될 긴 매개 변수 목록을 작성하게됩니다 touch. 긴 등가를 사용할 수도 있습니다.

      touch bspl0001.c bspl0002.c bspl0003.c
      
    • 파일 수를 변경할 수 있습니다 bspl{0001..0012}.c. 12 개의 파일이 필요한 경우을 실행할 수 있습니다 .

    • 선행 0 ( 0012대신 12)은 출력에 0으로 채워진 4 자리 숫자를 사용해야합니다.

4
또는 일부 키 입력을 저장하기 위해touch bspl000{1..3}.c
Reid

1
@Reid : Herios가 10 개 이상의 파일을 원하면 어떻게됩니까?
Helio

3
같은 확장자를 가진 파일 목록을 작성하려는 사람들을 위해touch {test,tes2,tes3}.js
Rick

1
@ 릭 : 내가 대답하지 않습니까? ;-) . 코드를 단순화 할 수 있습니다.touch tes{t,2,3}.js
Helio

1
그리고 하나의 명령 줄에서 수행 할 수도 있습니다 : $ mkdir learning_c; cd learning_c; touch bspl000 {1,2,3,4} .c. ";" 순서대로 실행할 명령을 추가하는 데 도움이됩니다.
Pavlos Theodorou

4

바로 가기 키 조합으로 번호가 매겨진 (다음) 파일 만들기

한 번에 모든 파일을 작성하는 이유는 무엇입니까? 단점은 비어 있고 사용하지 않는 파일이 많이 있다는 것입니다. 내가 실제로 사용하는 것 : 키 조합을 눌러 다음을 수행하십시오.

  1. 스크립트가 내 코드 디렉토리에서 "다음"파일이 무엇인지 확인하도록합니다.
  2. 올바른 이름의 파일 (shebang 포함)을 작성하고
  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. 헤드 섹션에서 디렉토리 경로를 설정하십시오 (선택 사항 : 기본 이름 및 / 또는 확장자, shebang 변경).
  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위해 작동하지 않습니다 . 쉘에 관계없이 작동하는 세 가지 대체 방법이 있습니다.

순서

보다 중립적 인 접근 방식은 seqcommand 를 결합 하여 printfoptions 형식의 일련의 숫자를 생성 하여 command에 전달하는 것 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

물론, 매우 광범위한 * nix 도구 인 Perl도 그렇게 할 수 있습니다. 여기에있는 한 줄짜리 명령은 다음과 같습니다.

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()함수는 프리픽스 (제 1 명령 줄 인수 최대 스플 라이스 문자열 m 생성 $ARGV[0])하고 지정된 수 있지만, 수행 4 0으로 번호 (채우고 printf, 서식의 스타일을 %04d부분), .c접미사를 첨부합니다 . 각 반복의 결과로 우리는 같은 이름을 구성합니다 bspl0001.c.

open(my $fh, ">", $var);close($fh)효과적으로 역할을 touch지정된 이름의 파일을 생성, 명령.

약간 길지만 Jacob Vlijm의 python 스크립트와 비슷한 방식으로 성능이 뛰어납니다. 원하는 경우 가독성을 위해 스크립트로 변환 할 수도 있습니다.

#!/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*

어 wk

또 다른 방법은 awkfor 루프를 실행하여 특정 파일로 리디렉션하는 것입니다. 이 접근 방식은 명령 줄 인수가있는 perl one-liner와 유사합니다. 하지만 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.