연결 및 압축 프로세스를 자동화하기 위해 어떤 스크립팅 언어를 사용할 수 있습니까?

연결 및 압축 프로세스를 자동화하기 위해 어떤 스크립팅 언어를 사용할 수 있습니까?

제가 작업 중인 프로젝트의 경우 많은 (midi) 파일을 연결 및 압축(zip 사용)하고 크기를 비교해야 합니다. 나는 다음과 같은 일을 할 수 있는 언어가 있어야 한다고 생각했습니다.

  1. 연결된 모든 쌍을 만듭니다(예: 01.mid 및 02.mid 파일을 병합하고 0102.* 파일을 만들어야 합니다. 유효한 midi 파일인지는 상관하지 않고 두 파일의 정보만 갖기를 원합니다. tar는 좋은 선택입니까?

  2. 모든 파일(원본 및 연결된 파일)을 독립적으로 압축

  3. 모든 파일 크기를 확인하고 Matlab이나 다른 도구를 사용하여 가져올 수 있는 테이블에 기록합니다.

bash 스크립트를 사용해야 합니까?

답변1

Bash 스크립트를 사용할 수 있지만 압축 등의 경우 다른 프로그램에 의존합니다. CSV 파일을 생성할 수 있고(CSV 구문이 반드시 생성하기 어려운 것은 아니지만) 연결하고 압축할 수 있는 Python이나 다른 스크립팅 언어를 사용하는 것이 더 나을 수 있습니다.

주어진 파일 디렉토리(길이는 다르지만 동일한 문자로 채워짐):

-rw-rw-r-- 1 anthon users   24 Apr 16 15:03 01.mid
-rw-rw-r-- 1 anthon users  254 Apr 16 15:03 02.mid
-rw-rw-r-- 1 anthon users  455 Apr 16 15:03 03.mid
-rw-rw-r-- 1 anthon users   98 Apr 16 15:03 04.mid
-rw-rw-r-- 1 anthon users  444 Apr 16 15:03 05.mid
-rw-rw-r-- 1 anthon users  239 Apr 16 15:03 06.mid
-rw-rw-r-- 1 anthon users  257 Apr 16 15:03 07.mid
-rw-rw-r-- 1 anthon users  128 Apr 16 15:03 08.mid
-rw-rw-r-- 1 anthon users  228 Apr 16 15:03 09.mid
-rw-rw-r-- 1 anthon users  160 Apr 16 15:03 10.mid

그리고 이 프로그램은 test.py:

#! /usr/bin/env python
# coding: utf-8

import sys
import os
import csv
import bz2

comb_name_map = {}
file_names = []
prev_name = None

# combine the names
for name in sys.argv[1:]:
    if prev_name:
        basename, ext = os.path.splitext(name)
        basename = os.path.basename(basename)
        combi_name = os.path.splitext(os.path.basename(prev_name))[0] + name
        comb_name_map[combi_name] = (prev_name, name)
        prev_name = None
    else:
        prev_name = name

for combi, org in comb_name_map.iteritems():
    file_names.append(combi + '.bz2')
    with bz2.BZ2File(file_names[-1], 'w') as outf:
        for name in org:
            with open(name, 'rb') as inf:
                buf = inf.read()
                outf.write(buf)
                file_names.append(name + '.bz2')
                with bz2.BZ2File(file_names[-1], 'w') as compf:
                    compf.write(buf)

with open('filesizes.csv', 'w') as fp:
    csvf = csv.writer(fp)
    for name in file_names:
        size = os.path.getsize(name)
        csvf.writerow([name, size])

다음으로 실행:

python test.py *.mid

다음과 같은 출력 파일을 얻게 됩니다:

-rw-rw-r-- 1 anthon users 45 Apr 16 15:26 0102.mid.bz2
-rw-rw-r-- 1 anthon users 39 Apr 16 15:26 01.mid.bz2
-rw-rw-r-- 1 anthon users 39 Apr 16 15:26 02.mid.bz2
-rw-rw-r-- 1 anthon users 45 Apr 16 15:26 0304.mid.bz2
-rw-rw-r-- 1 anthon users 43 Apr 16 15:26 03.mid.bz2
-rw-rw-r-- 1 anthon users 39 Apr 16 15:26 04.mid.bz2
-rw-rw-r-- 1 anthon users 44 Apr 16 15:26 0506.mid.bz2
-rw-rw-r-- 1 anthon users 43 Apr 16 15:26 05.mid.bz2
-rw-rw-r-- 1 anthon users 39 Apr 16 15:26 06.mid.bz2
-rw-rw-r-- 1 anthon users 41 Apr 16 15:26 0708.mid.bz2
-rw-rw-r-- 1 anthon users 39 Apr 16 15:26 07.mid.bz2
-rw-rw-r-- 1 anthon users 37 Apr 16 15:26 08.mid.bz2
-rw-rw-r-- 1 anthon users 43 Apr 16 15:26 0910.mid.bz2
-rw-rw-r-- 1 anthon users 39 Apr 16 15:26 09.mid.bz2
-rw-rw-r-- 1 anthon users 39 Apr 16 15:26 10.mid.bz2

그리고 파일 filesizes.csv:

0910.mid.bz2,43
09.mid.bz2,39
10.mid.bz2,39
0708.mid.bz2,41
07.mid.bz2,39
08.mid.bz2,37
0304.mid.bz2,45
03.mid.bz2,43
04.mid.bz2,39
0506.mid.bz2,44
05.mid.bz2,43
06.mid.bz2,39
0102.mid.bz2,45
01.mid.bz2,39
02.mid.bz2,39

파일 개수가 짝수인지 확인하세요 .mid. 원본 파일 이름과 크기를 포함하려면 file_names처리할 때 이름을 연결하면 됩니다.

답변2

예 - bash 스크립트로 충분합니다. 하지만 익숙한 스크립트 언어를 사용해야 합니다. Python, Perl은 다른 가능성이 있습니다.

관련 정보