Bash를 사용하여 두 디렉터리를 비교하고 패턴이 한 디렉터리에는 있지만 다른 디렉터리에는 없으면 세 번째 디렉터리에 복사합니다.

Bash를 사용하여 두 디렉터리를 비교하고 패턴이 한 디렉터리에는 있지만 다른 디렉터리에는 없으면 세 번째 디렉터리에 복사합니다.

나는 가지고있다

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_21234.mickey.AB1235.mikey.AB

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

답변1

이 같은? 이것은 단지 시작하기 위한 것일 뿐 그다지 강력하지는 않습니다...

dir_1=<some directory, e.g., /foo>
dir_2=<some directory, e.g., /foo/bar>
file_unique=<some directory, e.g., /foo/bar/tmp/>
for file in ${dir_1}/lockinfo.*.PATTERN; do
   # first, are there any matching files? If not, $file will
   # be set literally to ".../lockinfo.*.PATTERN"
   [[ ! -f "$file"]] && break
   # OK, there is at least one file
   basename=$(basename ${file})
   # if there is no such file in dir_2, cp the original
   # file, preserving its permissions and ownership, etc.
   [[ ! -f ${dir_2}/${basename} ]] && cp -p $file $file_unique
done

필요에 따라 추가 오류 검사, 공백 지원 등을 추가합니다.

관련 정보