반응형

출처 : https://stackoverflow.com/questions/2229825/where-can-i-set-environment-variables-that-crontab-will-use

crontab이 사용할 환경 변수를 어디에서 설정할 수 있습니까?

저는 매 시간마다 실행하는 crontab이 있습니다. 그것을 실행하는 사용자는 터미널에서 작업을 실행할 때 작동하는 .bash_profile의 환경 변수를 가지고 있습니다. 하지만, 그것을 실행할 때 환경변수가 crontab에 의해 선택되지는 않습니다.

저는 환경변수를 .profile.bashrc에서 설정을 시도했지만, 그 환경변수는 선택되지 않는 듯 합니다. crontab이 선택할 수 있도록 환경 변수을 어디에 넣어야 하는지 아시는 분 있으신가요?


20개의 답변 중 1개

명령어 라인에서 crontab -e를 실행했을 때 그 crontab 자체에서 환경 변수를 정의할 수 있습니다.

LANG=nb_NO.UTF-8
LC_ALL=nb_NO.UTF-8
# m h  dom mon dow   command

* * * * * sleep 5s && echo "yo"

이 특징은 cron의 특정 구현에서만 가능합니다. 우분투와 데비안은 crontab 파일 ( GNU mcron 도) 에서 선언을 허용하는 vixie-cron을 현재 사용합니다.

ArchlinuxRedhat은 환경변수를 허용하지 않고 cron.log에서 문법 오류를 발생하는 cronie를 사용합니다. 작업은 엔트리 마다 할 수 있습니다.

# m h  dom mon dow   command
* * * * * export LC_ALL=nb_NO.UTF-8; sleep 5s && echo "yo"
반응형
반응형

달러리치

소개

반응형
반응형

출처 : https://stackoverflow.com/questions/26835477/pickle-load-variable-if-exists-or-create-and-save-it

피클(Pickle) - 만약 존재하면 불러오고 그렇지 않으면 생성하여 저장하기

이미 존재하면 불러오고 그렇지 않으면 생성하여 덤프하여 pickle로 변수를 불어오는 더 좋은 방법이 있을까요?

if os.path.isfile("var.pickle"):
    foo = pickle.load( open( "var.pickle", "rb" ) )
else:
    foo = 3
    pickle.dump( foo, open( "var.pickle", "wb" ) )

2개 중 1개의 답변

당신은 용서를 구하면서 EAFP 원리를 따를 수 있습니다.

import pickle

try:
    foo = pickle.load(open("var.pickle", "rb"))
except (OSError, IOError) as e:
    foo = 3
    pickle.dump(foo, open("var.pickle", "wb"))
반응형
반응형

출처 : https://stackoverflow.com/questions/2921847/what-does-the-star-and-doublestar-operator-mean-in-a-function-call

함수 호출에서 별(*)과 쌍별(**) 연산자의 의미는 무엇입니까?

다음 코드 같은 zip(*x) 또는 f(**k)처럼 파이썬에서 * 연산자의 의미는 무엇입니까?

  1. 그것은 인터프리터로 내부적으로 어떻게 다루어집니까?
  2. 그것은 성능에 영향을 줍니까? 빠릅니까 또는 느립니까?
  3. 언제 유용하며 언제 그렇지 않습니까?
  4. 그것은 함수 선언에서 사용되어야 합니까? 호출할 때 사용되어야 합니까?

5개 중 1개의 답변

하나의 별 *은 시퀀스/컬렉션을 위치 인자로 unpack합니다. 다음처럼 사용할 수 있습니다.

def sum(a, b):
    return a + b

values = (1, 2)

s = sum(*values)

이는 튜플을 unpack하여 실제로 다음처럼 실행할 것입니다.

s = sum(1, 2)

쌍별 **은 같지만 dictionary와 이름있는 인자를 사용합니다.

values = { 'a': 1, 'b': 2 }
s = sum(**values)

다음처럼 결합하여 사용도 가능합니다.

def sum(a, b, c, d):
    return a + b + c + d

values1 = (1, 2)
values2 = { 'c': 10, 'd': 15 }
s = sum(*values1, **values2)

이는 다음처럼 실행할 것입니다.

s = sum(1, 2, c=10, d=15)

또한, 파이썬 문서에서 4.7.4 인자 목록 언 패킹 섹션도 확인하세요.


또한 *x**y 인수를 사용하도록 함수를 정의할 수 있습니다. 이렇게 하면 함수가 선언에 구체적으로 이름이 지정되지 않아도 위치 및/또는 명명된 인수를 원하는 만큼 허용할 수 있습니다.

예시:

def sum(*values):
    s = 0
    for v in values:
        s = s + v
    return s

s = sum(1, 2, 3, 4, 5)

** 예시입니다.

def get_a(**values):
    return values['a']

s = get_a(a=1, b=2)      # 1을 리턴

이는 그들을 선언할 필요 없이 많은 수의 인자를 지정할 수 있도록 합니다.

def sum(*values, **options):
    s = 0
    for i in values:
        s = s + i
    if "neg" in options:
        if options["neg"]:
            s = -s
    return s

s = sum(1, 2, 3, 4, 5)            # 15를 리턴
s = sum(1, 2, 3, 4, 5, neg=True)  # -15를 리턴
s = sum(1, 2, 3, 4, 5, neg=False) # 15를 리턴
반응형
반응형

출처 : https://note.nkmk.me/en/python-for-enumerate-zip/

Python에서 enumerate()와 zip() 함께 사용하기

Python에서 enumerate()zip()for 루프에서 iterable(list, tuple 등)의 요소들을 iterate하는 데 유용합니다.

당신은 enumerate()로 인덱스를 얻을 수 있으며, zip()으로 여러개의 요소들을 얻을 수 있습니다.

이 글은 enumerate()zip()을 함께 사용할 때 참고 사항을 설명합니다.

enumerate()와 zip() 함께 사용할 때 참고 사항

여러개의 리스트와 인덱스의 요소를 얻고 싶을 때 enumerate()zip()를 함께 사용할 수 있습니다.

이 경우, for i, (a, b, ...) in enumerate(zip( ... ))처럼 괄호로 zip()의 요소들을 둘러쌓을 필요가 있습니다.

names = ['Alice', 'Bob', 'Charlie']
ages = [24, 50, 18]

for i, (name, age) in enumerate(zip(names, ages)):
    print(i, name, age)
# 0 Alice 24
# 1 Bob 50
# 2 Charlie 18

튜플로 zip()의 요소들을 받을 수도 있습니다.

for i, t in enumerate(zip(names, ages)):
    print(i, t)
# 0 ('Alice', 24)
# 1 ('Bob', 50)
# 2 ('Charlie', 18)
for i, t in enumerate(zip(names, ages)):
    print(i, t[0], t[1])
# 0 Alice 24
# 1 Bob 50
# 2 Charlie 18

표준 라이브러리의 itertools 모듈의 count()zip() 함수는 (i, a, b) 처럼 nested되지 않은 형태를 생성하는 데 사용될 수 있습니다.

반응형
반응형

출처 : https://stackoverflow.com/questions/893657/how-do-i-calculate-r-squared-using-python-and-numpy

Python과 Numpy를 사용하여 r-제곱을 계산하는 방법?

Python과 Numpy를 사용하여 임의의 차수에 가장 적합한 다항식을 계산합니다. x값, y값 및 내가 맞추려는 다항식의 차수(선형, 2차 등) 목록을 전달합니다.

이것은 많은 효과가 있지만 r(상관 계수)과 r-제곱(결정 계수)도 계산하고 싶습니다. Excel의 최적 추세선 기능 및 제가 계산하는 r-제곱 값 결과와 비교하고 있습니다. 이것을 사용하여 선형 최적 맞춤(차수는 1과 같음)에 대해 r-제곱을 올바르게 계산하고 있다는 것을 알고 있습니다. 그러나 내 함수는 차수가 1보다 큰 다항식에서는 작동하지 않습니다.

엑셀로 이를 할 수 있습니다. Numpy를 사용하여 고차 다항식에 대한 r-제곱을 어떻게 계산합니까?

제가 만든 함수는 다음과 같습니다.

import numpy

# 다항 회귀
def polyfit(x, y, degree):
    results = {}

    coeffs = numpy.polyfit(x, y, degree)
     # 다항 상관 계수 
    results['polynomial'] = coeffs.tolist()

    correlation = numpy.corrcoef(x, y)[0,1]

     # r
    results['correlation'] = correlation
     # r-제곱
    results['determination'] = correlation**2

    return results

12개 중 2개의 답변

numpy.polyfit 문서로부터 이는 선형 회귀에 적합(fit) 합니다. 특히, 차수가 'd'인 numpy.polyfit은 평균 함수를 사용하여 선형 회귀에 맞춥니다.

E(y|x) = p_d * x ** d + p_{d-1} * x ** (d-1) + ... + p_1 * x + p_0

따라서 해당 회귀에 적합(fit)하도록 R-제곱을 계산하기만 하면 됩니다. 선형 회귀에 대한 wikipedia 페이지는 자세한 내용을 제공합니다. 당신은 몇 가지 방법으로 계산할 수 있는 R^2에 관심이 있습니다. 가장 쉬운 것은 아마도

SST = Sum(i=1..n) (y_i - y_bar)^2
SSReg = Sum(i=1..n) (y_ihat - y_bar)^2
Rsquared = SSReg/SST

여기서 y의 평균으로 'y_bar'를 사용하고 각 점에 대한 맞춤(fit) 값으로 'y_ihat'을 사용합니다.

저는 numpy에 익숙하지 않습니다(저는 일반적으로 R에서 작업합니다). 따라서 R-제곱을 계산하는 더 깔끔한 방법이 있을 수 있지만 다음 방법은 정확할 것입니다.

import numpy

# 다항 회귀
def polyfit(x, y, degree):
    results = {}

    coeffs = numpy.polyfit(x, y, degree)

     # 다항 상관 계수 
    results['polynomial'] = coeffs.tolist()

    # r-제곱
    p = numpy.poly1d(coeffs)
    # 적합(fit) 값들과 평균 
    yhat = p(x)                         # or [p(z) for z in x]
    ybar = numpy.sum(y)/len(y)          # or sum(y)/len(y)
    ssreg = numpy.sum((yhat-ybar)**2)   # or sum([ (yihat - ybar)**2 for yihat in yhat])
    sstot = numpy.sum((y - ybar)**2)    # or sum([ (yi - ybar)**2 for yi in y])
    results['determination'] = ssreg / sstot

    return results

매우 늦은 답변이지만, 이를 위해 준비된 함수가 누군가는 필요할 것입니다.

scipy.stats.linregress

예시

slope, intercept, r_value, p_value, std_err = scipy.stats.linregress(x, y)
반응형
반응형

출처 : https://stackoverflow.com/questions/20449680/boolean-operators-a-o-in-bash

Bash에서 Boolean 연산자( &&, -a, ||, -o )

Unix 연산자 &&, -a, ||, -o 사이에 차이점을 설명해 주실수 있으신가요?

2가지 타입의 사용법에 제약은 무엇인가요?

간단히 &&|| 연산자는 조건에서 flag를 사용할 때만 사용되나요?

다음처럼 :

[ "$1" = "yes" ] && [ -r $2.txt ]

[ "$1" = "yes" -a $2 -lt 3 ]

입니다.

2개의 답변 중 1개의 답변

경험상 법칙 : 대괄호 안에 -a-o를 사용하고 밖에서는 &&||를 사용합니다.

shell 구문과 [명령의 구문 사이의 차이점을 이해하는 것이 중요합니다.

  • &&||는 shell 연산자입니다. 두 명령의 결과를 결합하는 데 사용됩니다. 그것들은 shell 구문이기 때문에 특별한 구문적 의미가 있으며 명령의 인수로 사용할 수 없습니다.

  • [ 는 특별한 구문이 아닙니다. 실제로 이름 [ 또는 test로 알려진 명령입니다. [ 는 일반적인 명령이므로 -a-oandor 또는 연산자로 사용합니다. &&||는 명령으로 볼 수 없는 쉘 구문이기 때문에 (안에서는) 사용할 수 없습니다.

하지만 기다리십시오! Bash에는 [[ ]] 형식의 더 멋진 테스트 구문이 있습니다. 이중 대괄호를 사용하면 정규식 및 와일드 카드와 같은 항목에 액세스 할 수 있습니다. 대괄호 안에서 &&, ||, <>와 같은 쉘 연산자를 자유롭게 사용할 수도 있습니다. [ 와 달리 이중 괄호 형식은 특수 쉘 구문이기 때문입니다. Bash는 [[ 자체를 파싱하여 [[$ foo == 5 && $ bar == 6]]와 같은 것을 쓸 수 있습니다.

반응형
반응형

출처 : https://stackoverflow.com/questions/29244351/how-to-sort-a-file-in-place/29244387

파일 자체를 정렬하는 방법

sort file 명령을 사용할 때, 파일의 내용을 정렬하여 보여줍니다. 어떤 종류의 출력이 아니라 정렬된 파일을 원하는 데 어떻게 해야 합니까?


7개 답변 중 1개

당신은 정렬된 출력으로 파일 redirection을 사용할 수 있습니다.

sort input-file > output_file
sort 입력파일 > 출력파일

아니면 당신은 -o, --output=FILE 옵션을 같은 입력과 출력 파일을 가리키며 정렬하여 사용할 수 있습니다.

sort -o file file
sort -o 파일 파일

파일 이름을 반복하지 않고 ( bash 중괄호 확장 으로 )

sort -o file{,}
sort -o 파일{,}

참고: 일반적인 실수는 출력을 동일한 입력 파일로 redirect 하는 것입니다(예: sort file > file). 이것은 쉘이 redirection(sort(1) 프로그램이 아님)을 하고 있기 때문에 작동하지 않으며, sort(1) 프로그램에 읽을 기회를 주기 직전에 입력 파일(출력이기도 함)이 지워집니다.

반응형
반응형

출처 : https://www.tecmint.com/rsync-local-remote-file-synchronization-commands/

Rsync (원격 동기화): 리눅스에서 Rsync 명령의 10가지 실용적인 예시

Rsync (원격 동기화)리눅스/유닉스 시스템에서 로컬 뿐만이 아니라 원격으로 파일과 디렉터리를 복사하고 동기화하는데 가장 보편적으로 사용되는 명령입니다. rsync 명령의 도움으로 당신은 당신의 데이터를 로컬과 원격으로 디렉터리, 디스크, 네트워크 상에서 복사하고 동기화할 수 있고 두 리눅스 머신 간에 백업과 미러링을 할 수 있습니다.

이 글은 파일을 리눅스 기반의 머신에서 로컬과 원격으로 파일을 전송하는 rsync 명령의 10개의 기본적이고 고급 사용법을 설명합니다. rsync 명령을 실행하는 데 root 사용자일 필요는 없습니다.

Rsync 명령의 장점과 특징

  • 원격 시스템부터 또는 원격으로 파일을 효율적으로 복사하고 동기화 합니다.
  • 링크, 장치, 소유자, 그룹, 권한 복사를 지원합니다.
  • rsync는 파일의 두 집합 사이에 차이점만 전송하는 원격 갱신 프로토콜을 사용하기 때문에 scp (Secure Copy) 보다 빠릅니다. 처음에는 파일 또는 디렉토리의 전체 내용을 소스에서 대상으로 복사하지만 다음부터는 변경된 블록과 바이트만 대상으로 복사합니다.
  • Rsync는 압축 및 압축 해제 방식을 사용하여 데이터를 송수신하면서 대역폭을 덜 소모합니다.

rsync 명령의 기본 문법

# rsync 옵션 원본 대상
# rsync options source destination

명령에서 사용되는 몇 가지 공통 옵션

  • -v : 자세한 설명 출력
  • -r : 데이터를 재귀적으로 복사합니다(그러나 데이터를 전송하는 동안 타임스탬프와 권한을 유지하지 않습니다.)
  • -a : 아카이브 모드, 아카이브 모드는 파일을 재귀적으로 복사할 수 있으며 심볼릭 링크, 파일 권한, 사용자 및 그룹 소유권 및 타임스탬프도 보존합니다.
  • -z : 파일 데이터 압축
  • -h : 사람이 읽을 수 있는 형식의 출력 숫자

추천 읽기: 비표준 SSH 포트와 함께 Rsync를 사용하여 파일/디렉토리를 동기화하는 방법

리눅스 머신에서 rsync 설치하기

다음 명령으로 rsync 패키지를 설치할 수 있습니다.

# yum install rsync (Red Hat 기반 시스템에서)
# apt-get install rsync (On Debian 기반 시스템에서)

1. 로컬에서 파일과 디렉터리 복사/동기화 하기

로컬 컴퓨터에서 파일 복사/동기화 하기

다음 명령어는 로컬에서 한 위치에서 다른 위치로 하나의 파일을 동기화할 것입니다. 여기 이 예시에서 파일 이름 backup.tar/tmp/backups 폴더로 복사되거나 동기화될 것입니다.

[root@tecmint]# rsync -zvh backup.tar /tmp/backups/

created directory /tmp/backups

backup.tar

위 예시에서 목적지(/tmp/backups)가 아직 없다면 rsync는 자동으로 목적지에 디렉터리를 만들 것입니다.

로컬 컴퓨터에서 디렉터리 복사/동기화 하기

다음 명령어는 같은 머신에서 한 디렉터리에서 다른 디렉터리로 모든 파일을 동기화하거나 전송할 것입니다. 여기 이 예시에서 /root/rpmpkgs는 몇 개의 rpm 패키지 파일을 포함하며 /tmp/backups 폴더로 복사될 것입니다.

[root@tecmint]# rsync -avzh /root/rpmpkgs /tmp/backups/

sending incremental file list

rpmpkgs/

rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm

rpmpkgs/mod_ssl-2.2.3-82.el5.centos.i386.rpm

rpmpkgs/nagios-3.5.0.tar.gz

rpmpkgs/nagios-plugins-1.4.16.tar.gz

sent 4.99M bytes  received 92 bytes  3.33M bytes/sec

total size is 4.99M  speedup is 1.00

2. 서버에서 또는 서버로 파일과 디렉터리 복사/동기화 하기

로컬 서버에서 원격 서버로 디렉터리 복사하기

이 명령은 로컬 머신에서 원격 머신으로 디렉터리를 동기화 합니다. 예시: 로컬 컴퓨터에 몇개의 RPM 패키지를 포함하는 "rpmpkg" 폴더가 있습니다. 로컬 디렉터리의 내용을 원격서버로 보내고 싶으시면, 다음 명령을 사용할 수 있습니다.

[root@tecmint]$ rsync -avz rpmpkgs/ root@192.168.0.101:/home/

root@192.168.0.101's password:

sending incremental file list

./

httpd-2.2.3-82.el5.centos.i386.rpm

mod_ssl-2.2.3-82.el5.centos.i386.rpm

nagios-3.5.0.tar.gz

nagios-plugins-1.4.16.tar.gz

sent 4993369 bytes  received 91 bytes  399476.80 bytes/sec

로컬 서버에서 원격 서버로 디렉터리의 특정 파일만 복사하기(역자추가)

여기 예시로 로컬 컴퓨터에 몇개의 RPM 패키지를 포함하는 "rpmpkg" 폴더가 있습니다. 로컬 디렉터리의 확장자가 rpm인 파일만을 원격서버로 보내고 싶으시면, 다음 명령을 사용할 수 있습니다.

[root@tecmint]$ rsync -avz rpmpkgs/*.rpm root@192.168.0.101:/home/

root@192.168.0.101's password:

sending incremental file list

./

httpd-2.2.3-82.el5.centos.i386.rpm

mod_ssl-2.2.3-82.el5.centos.i386.rpm

sent ? bytes  received ? bytes  ? bytes/sec

원격 디렉터리를 로컬 머신으로 복사/동기화 하기

이 명령은 당신이 원격 디렉터리를 로컬 디렉터리로 동기화 하도록 도움을 줄 것입니다. 여기 예시로 원격서버에 있는 디렉터리 /home/tarunika/rmpkgs는 당신의 로컬 컴퓨터의 /tmp/myrpms로 복사될 것입니다.

[root@tecmint]# rsync -avzh root@192.168.0.100:/home/tarunika/rpmpkgs /tmp/myrpms

root@192.168.0.100's password:

receiving incremental file list

created directory /tmp/myrpms

rpmpkgs/

rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm

rpmpkgs/mod_ssl-2.2.3-82.el5.centos.i386.rpm

rpmpkgs/nagios-3.5.0.tar.gz

rpmpkgs/nagios-plugins-1.4.16.tar.gz

sent 91 bytes  received 4.99M bytes  322.16K bytes/sec

total size is 4.99M  speedup is 1.00

3. SSH를 통한 RSync

rsync로 우리는 데이터 전송을 위해 SSH (Secure Shell) 을 사용할 수 있습니다. SSH 프로토콜을 사용하면 데이터가 전송되는 동안 아무도 읽을 수 없도록 암호화된 보안 연결로 데이터가 인터넷의 유선을 통해 전송되고 있음을 확인할 수 있습니다.

또한 우리가 rsync를 사용할 때 특정한 작업을 성공하기 위해 user/root 비밀번호를 제공할 필요가 있습니다. SSH 옵션을 사용하여 암호화된 방법으로 로그인하여 전송할 수 있고 당신의 비밀번호는 안전할 것입니다.

SSH로 원격 서버에서 로컬 서버로 파일 복사하기

rsync로 프로토콜을 지정하기 위해 "-e" 옵션을 당신이 사용하기 원하는 프로토콜 이름을 함께 제공할 필요가 있습니다. 여기 예시에서 "-e" 옵션으로 "ssh" 를 사용하여 데이터 전송을 수행할 것입니다.

[root@tecmint]# rsync -avzhe ssh root@192.168.0.100:/root/install.log /tmp/

root@192.168.0.100's password:

receiving incremental file list

install.log

sent 30 bytes  received 8.12K bytes  1.48K bytes/sec

total size is 30.74K  speedup is 3.77

SSH로 로컬 서버에서 원격 서버로 파일 복사하기

[root@tecmint]# rsync -avzhe ssh backup.tar root@192.168.0.100:/backups/

root@192.168.0.100's password:

sending incremental file list

backup.tar

sent 14.71M bytes  received 31 bytes  1.28M bytes/sec

total size is 16.18M  speedup is 1.10

추천 읽기: 리눅스에서 새로운 또는 변경/수정된 파일을 동기화하기 위해 Rsync 사용하기

4. rsync로 데이터 전송하는 동안 진행상태 보기

하나의 머신에서 다른 머신으로 데이터가 전송되는 동안 진행상태를 보기 위해 우리는 '--progress' 옵션을 사용할 수 있습니다. 이것은 파일과 전송을 완료하는 데 남은 시간을 표시합니다.

[root@tecmint]# rsync -avzhe ssh --progress /home/rpmpkgs root@192.168.0.100:/root/rpmpkgs

root@192.168.0.100's password:

sending incremental file list

created directory /root/rpmpkgs

rpmpkgs/

rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm

           1.02M 100%        2.72MB/s        0:00:00 (xfer#1, to-check=3/5)

rpmpkgs/mod_ssl-2.2.3-82.el5.centos.i386.rpm

          99.04K 100%  241.19kB/s        0:00:00 (xfer#2, to-check=2/5)

rpmpkgs/nagios-3.5.0.tar.gz

           1.79M 100%        1.56MB/s        0:00:01 (xfer#3, to-check=1/5)

rpmpkgs/nagios-plugins-1.4.16.tar.gz

           2.09M 100%        1.47MB/s        0:00:01 (xfer#4, to-check=0/5)

sent 4.99M bytes  received 92 bytes  475.56K bytes/sec

total size is 4.99M  speedup is 1.00

5. --include 와 --exclude 옵션 사용하기

이 두 가지 옵션을 사용하면 매개변수를 지정하여 파일을 포함제외할 수 있습니다. 이 옵션은 동기화에 포함할 파일 또는 디렉터리를 지정하고 전송을 원하지 않는 파일 및 폴더를 제외하는 데 도움이 됩니다.

여기 예시로 rsync 명령은 'R' 로 시작하는 파일이나 디렉터리를 포함하며 모든 다른 파일과 디렉터리는 제외될 것입니다.

[root@tecmint]# rsync -avze ssh --include 'R*' --exclude '*' root@192.168.0.101:/var/lib/rpm/ /root/rpm

root@192.168.0.101's password:

receiving incremental file list

created directory /root/rpm

./

Requirename

Requireversion

sent 67 bytes  received 167289 bytes  7438.04 bytes/sec

total size is 434176  speedup is 2.59

6. --delete 옵션 사용하기

파일 또는 디렉토리가 원본에 없지만 대상에는 이미 존재하는 경우 동기화하는 동안 대상에서 기존 파일/디렉토리를 삭제할 수 있습니다.

'-delete' 옵션을 사용하여 원본 디렉토리에 없는 파일을 삭제할 수 있습니다.

원본와 대상은 동기화 됩니다. 이제 대상에서 새 파일 test.txt가 만들어 집니다.

[root@tecmint]# touch test.txt
[root@tecmint]# rsync -avz --delete root@192.168.0.100:/var/lib/rpm/ .
Password:
receiving file list ... done
deleting test.txt
./
sent 26 bytes  received 390 bytes  48.94 bytes/sec
total size is 45305958  speedup is 108908.55

대상에는 test.txt((라는 새 파일이 있으며 **'–delete' 옵션으로 소스와 동기화하면 test.txt 파일이 제거됩니다.

7. 전송될 파일의 최대 크기 설정

전송되거나 동기화될 파일의 (최대) 크기를 지정할 수 있습니다. "--max-size" 옵션과 함께 최대 크기를 지정할 수 있습니다. 여기 예시로 최대 파일 크기는 200k 이며, 이 명령은 200k 보다 같거나 작은 파일만 전송할 것입니다.

[root@tecmint]# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ root@192.168.0.100:/root/tmprpm

root@192.168.0.100's password:

sending incremental file list

created directory /root/tmprpm

./

Conflictname

Group

Installtid

Name

Provideversion

Pubkeys

Requireversion

Sha1header

Sigmd5

Triggername

__db.001

sent 189.79K bytes  received 224 bytes  13.10K bytes/sec

total size is 38.08M  speedup is 200.43

8. 성공적인 전송 후에 원본 파일 자동으로 지우기

메인 웹 서버와 데이터 백업 서버가 있다고 가정하면, 매일 백업을 생성하고 당신의 백업서버로 동기화 하면 이제 당신의 웹 서버에 있는 백업의 로컬 복제본은 유지하고 싶지 않을 것입니다.

그럼, 파일 전송 완료될 때까지 기다렸다가 수동으로 이 로컬 백업을 삭제해야 할까요? 당연히 아닙니다. 이 자동 삭제는 '--remove-source-files' 옵션을 사용하여 할 수 있습니다.

[root@tecmint]# rsync --remove-source-files -zvh backup.tar /tmp/backups/

backup.tar

sent 14.71M bytes  received 31 bytes  4.20M bytes/sec

total size is 16.18M  speedup is 1.10

[root@tecmint]# ll backup.tar

ls: backup.tar: No such file or directory

9. rsync로 모의테스트 하기

당신이 초보자이고 rsync를 사용하고 있고 당신의 명령이 정확히 무엇을 하는지 모르는 경우 Rsync는 대상 폴더의 항목을 실제로 엉망으로 만들 수 있으며 실행 취소를 수행하는 것은 지루한 작업이 될 수 있습니다.

추천 읽기: Rsync 사용하여 두 웹 서버/웹 사이트를 동기화 하는 방법

이 옵션을 사용하면 아무 것도 변경되지 않고 명령의 테스트 실행만 수행하고 명령의 출력이 표시됩니다. 출력이 원하는 것과 정확히 일치하면 명령에서 '-dry-run' 옵션을 제거하고 명령의 출력을 표시할 수 있습니다. 터미널에서 실행합니다.

root@tecmint]# rsync --dry-run --remove-source-files -zvh backup.tar /tmp/backups/

backup.tar

sent 35 bytes  received 15 bytes  100.00 bytes/sec

total size is 16.18M  speedup is 323584.00 (DRY RUN)

10. 대역폭 제한을 설정하고 파일 전송하기

당신은 '–bwlimit' 옵션의 도움으로 한 머신에서 다른 머신으로 데이터를 전송하는 동안 대역폭을 설정할 수 있습니다. 이 옵션은 입출력(I/O) 대역폭을 제한하도록 우리에게 도움을 줍니다.

[root@tecmint]# rsync --bwlimit=100 -avzhe ssh  /var/lib/rpm/  root@192.168.0.100:/root/tmprpm/
root@192.168.0.100's password:
sending incremental file list
sent 324 bytes  received 12 bytes  61.09 bytes/sec
total size is 38.08M  speedup is 113347.05

또한 기본적으로 rsync는 변경된 블록과 바이트만 동기화합니다. 명시적으로 전체 파일을 동기화하려면 '-W' 옵션을 사용합니다.

[root@tecmint]# rsync -zvhW backup.tar /tmp/backups/backup.tar
backup.tar
sent 14.71M bytes  received 31 bytes  3.27M bytes/sec
total size is 16.18M  speedup is 1.10

이제 rsync에 알아 보았고 더 많은 옵션에 대한 매뉴얼 페이지에서 볼 수 있습니다. 앞으로 더 흥미롭고 흥미로운 튜토리얼을 위해 Tecmint와 계속 연결하십시오. 귀하의 의견과 제안을 남겨주세요.

반응형
반응형

출처

https://stackoverflow.com/questions/40852784/how-can-i-use-a-variable-in-curl-call-within-bash-script

bash 스크립트에서 curl 호출시 변수를 어떻게 사용할 수 있을까요?

간단한 작업이 있고 제 bash 스크립트 안에 curl 호출시 변수를 어떻게 사용할 수 있을지 알아내기 위해 이미 여러 시간을 소비하였습니다.

message="Hello there"
curl -X POST -H 'Content-type: application/json' --data '{"text": "${message}"}'

이는 문법적으로 작은 따옴표 안에 있기 때문에 ${message}을 출력합니다. 만약 따옴표를 바깥쪽은 큰 따옴표 안쪽은 작은 따옴표로 변경하였을 때 Hello와 there 명령어가 없다고(command not found: Hello 다음에 command not found: there) 나옵니다.

어떻게 해야 합니까?


2개 답변 중 1개만 추림

변수는 작음 따옴표 안에서 확장될 수 없습니다. 큰 따옴표로 다음처럼 다시 작성할 수 있습니다.

curl -X POST -H 'Content-type: application/json' --data "{\"text\": \"${message}\"}"

큰 따옴표 안에 큰 따옴표는 escape 문자(\)가 있어야 합니다.

다른 방법은 다음처럼 할 수 있습니다.

curl -X POST -H 'Content-type: application/json' --data '{"text": "'"${message}"'"}'

이것은 작은 따옴표에서 밖에서 단어 분할을 방지하기 위해 ${message} 를 큰 따옴표로 묶은 다음 다른 작은 따옴표 문자열로 끝납니다. 다음처럼 처리 됩니다.

... '{"text": "'"${message}"'"}'
    ^^^^^^^^^^^^
    작은 따옴표 문자열


... '{"text": "'"${message}"'"}'
                ^^^^^^^^^^^^
                큰 따옴표 문자열


... '{"text": "'"${message}"'"}'
                            ^^^^
                            작은 따옴표 문자열
반응형

+ Recent posts