배경 : 우리는 테이프 라이브러리와 백업 소프트웨어 인 NetWorker를 사용하여 여기에 데이터를 백업합니다. 설치되어 클라이언트는 매우 기본이며, 우리는 둘 이상의 대상 디렉토리를 복원해야 할 때 우리는 단순히 다음 줄의 X와 스크립트를 통해 백그라운드에서 X 클라이언트 인스턴스를 호출하는 스크립트를 만들 :내 정규식이 너무 욕심이 많습니까?
recover -c client-srv -t "Mon Dec 10 08:00:00" -s barckup-srv -d /dest/dir/ -f -a /src/dir &
문제는 동일한 머신에서 동시에 백업되는 서로 다른 파티션/디렉토리가 여러 개의 다른 테이프에 퍼져있을 수 있으며 백업 및 복원간에 라이브러리에서 일부 테이프가 제거되었을 수 있다는 것입니다.
최근까지 사람들이 필요한 테이프가 무엇인지 알아내는 유일한 방법은 라이브러리가 특정 테이프가 없다는 불평을 기다리는 것 외에 다른 테이프를 사용하여 가짜 복원을 설정하는 것입니다. 진절머리 나는 오래된 데스크탑 GUI 클라이언트와 특정 메뉴 옵션을 누르십시오. 첫 번째 옵션은 테이프가 오프 사이트로 밝혀지면 되돌아 오는 데 하루가 걸리고 초는 지루하고 시간이 많이 걸립니다.
실제 질문 : 나는 위의 명령으로 이미 작성한 스크립트를 읽고 대화식 CLI 클라이언트로 보내고 어떤 테이프를 뱉어내는 "메타"스크립트를 작성했습니다 필요한 경우, 실제로 라이브러리에있는 경우. 이렇게하려면 스크립트는 필요한 정보를 꺼내 다음과 같은 정규 표현식을 사용
# pull out a list of the -a targets
restore_targets="`sed 's/^.* -a \([^ ]*\) .*$/\1/' $rec_script`"
# pull out a list of -c clients
restore_clients="`sed 's/^.* -c \([^ ]*\) .*$/\1/' $rec_script`"
numclients=`echo $restore_clients | uniq | wc -l`
# pull out a list of -t dates
restore_dates="`sed 's/^.* -t \"\([^\"]*\)\" .*$/\1/' $rec_script`"
numdates=`echo $restore_dates | uniq | wc -l`
내가 이름을 기억하지 않는 점, 정규 표현식에의 s/\(x\)/\1/
유형을 사용하여 몹시 익숙하지 않다, 그러나입니다 이게 내가하고있는 일을 성취하는 가장 좋은 방법이야? 명령 이으로 작동하지만 불필요하게 .*
을 사용하고 있는지 궁금합니다.
읽고있는 데이터 샘플을 제공 할 수 있습니까? 어쩌면 당신이 실제로 찾고있는 무엇인가? 나는 Regex를보고 있지만, 당신이 읽고있는 샘플을 보지 않고 무엇을 얻고 싶은지 정확히 알 수는 없다. – Nick
@Nick 그는 위에서 인용 한 것과 같은 라인을 포함하고있는 스크립트에서'recover'로 시작하여 읽고 있습니다. – Barmar
@Barmar 와우, 이것은 내가 오늘 아침에 커피를 빼먹었습니다. 나는 그것을 지금 본다. – Nick