스크립트 - 매개변수를 기반으로 텍스트 파일의 레코드와 일치하는 파일을 이동합니다.

스크립트 - 매개변수를 기반으로 텍스트 파일의 레코드와 일치하는 파일을 이동합니다.

내가 이루고 싶은 것은2개의 매개변수를 기반으로 텍스트 파일의 레코드와 일치하는 디렉터리의 파일을 이동합니다..

예를 들어 텍스트 파일에 다음과 같은 기록이 있습니다.

SPPARK|10416|3308123|3308123|Uphold|Thelma|1930/05/20||

내 디렉토리에 다음 내용의 파일이 있습니다.

1123_M1123_UPHOLD_M1123_MESSAGE_SPPARK_348642.pdf

따라서 성과 UPHOLD네 번째 필드가 M1123내 텍스트 파일의 필드와 일치하면 해당 필드를 지정된 디렉터리로 이동하고 싶습니다.

for files in test/* ; do
 echo $files | awk -F "_" '{print $3,$4}'
done

답변1

이 시도. 테스트 후 "echo" 명령을 cp 또는 mv로 변경합니다.

for f in samples.txt ; do 
  echo /source/path/*$(cut -d '|' -f 5,2 $f | tr '|'a-z '_'A-Z)*.pdf /destination/path
done

미안 내 실수 야. @Kusalananda 감사합니다. 위의 답변이 잘못되었다고 생각하고 이 답변을 시도해 보세요. /src에서 /dst로 파일을 복사하는 열 5와 4를 필터링한다고 가정합니다.

awk -F "|" '{system("cp /src/*"toupper($5)"_"$4"*.pdf /dst")}' samples.txt

답변2

나는 이것을 반대 방향으로 접근할 것입니다:

  • 텍스트 파일을 한 줄씩 읽고 필드로 분할
  • 해당 파일을 일치시키고 이동하십시오.

EG(가정 bash및 GNU mv):

#!/bin/bash

shopt -s nullglob

while IFS='|' read -r loc a b c last first d e; do 
  echo mv --no-clobber -t path/to/target/ -- *_"$a"_"${last^^}"_*_*_*_*.pdf
done < file.txt

echo원하는 대로 작동하고 있다는 사실이 만족스러우면 제거하세요.

관련 정보