dir_1 및 dir_2에서 *.PATTERN이라는 패턴과 일치하는 파일을 찾아 다른 디렉터리에 복사하고 싶습니다.

dir_1 및 dir_2에서 *.PATTERN이라는 패턴과 일치하는 파일을 찾아 다른 디렉터리에 복사하고 싶습니다.

나는 가지고있다

dir_1=/foo
dir_2=/foo/bar
file_unique=/foo/bar/tmp/

두 개의 디렉토리를 비교 dir_1하고 dir_2. 다음과 같은 dir_1패턴과 일치하는 파일을 찾고 싶습니다 .dir_2*.PATTERN

PATTERN은 모든 단어에 대한 자리 표시자입니다. dir_1예시 파일은 lockinfo.1234.mikey또는 lockinfo.1235.mikey.

dir_2 file예는 다음 1234.mickey.AB과 같습니다1235.mikey.AB

스키마가 존재 dir_1하지만 존재하지 않는 경우 dir_2전체 파일을 디렉터리에 복사합니다.file_unique

#!/bin/bash

# setup folders for our different stages
dir_1=/dev/shm
dir_2=/var/spool/jobs
file_unique=/dev/shm/tmp

mkdir /dev/shm/tmp

for file in "${dir_1}"/.lockinfo.*.mickey; do
     [[ ! -f "$file"]]  &&  break   
      basename=$(basename ${file})
      [[ ! -f ${dir_2}/${basename} ]] && cp -p $file $file_unique
done

위의 오류는 다음과 같습니다.

gpu_lock_healthcheck.ver1: line 13: unexpected token `newline', conditional binary operator expected

gpu_lock_healthcheck.ver1: line 13: syntax error near `break'

gpu_lock_healthcheck.ver1: line 13: `         [[ ! -f "$file"]]  &&  break   '

답변1

13행에 오타가 있습니다. 쉘이 조건부 테스트 구성의 끝으로 인식하려면 종결자 앞 ]](뒤 ) 에 공백이 있어야 합니다 ."$file"

다음을 사용하여 쉘 스크립트를 확인하는 것이 좋습니다.shellcheck이러한 오류를 감지하는 도구(많은 Linux 배포판에서 독립 실행형으로도 사용 가능)

관련 정보