![dir_1 및 dir_2에서 *.PATTERN이라는 패턴과 일치하는 파일을 찾아 다른 디렉터리에 복사하고 싶습니다.](https://linux55.com/image/221642/dir_1%20%EB%B0%8F%20dir_2%EC%97%90%EC%84%9C%20*.PATTERN%EC%9D%B4%EB%9D%BC%EB%8A%94%20%ED%8C%A8%ED%84%B4%EA%B3%BC%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%B0%BE%EC%95%84%20%EB%8B%A4%EB%A5%B8%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%97%90%20%EB%B3%B5%EC%82%AC%ED%95%98%EA%B3%A0%20%EC%8B%B6%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
나는 가지고있다
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 배포판에서 독립 실행형으로도 사용 가능)