부분적으로 일치하는 파일을 선택적으로 다른 디렉터리로 이동

부분적으로 일치하는 파일을 선택적으로 다른 디렉터리로 이동

저는 상위 디렉토리에 부분적으로 번호가 매겨진 100개의 파일이 있는 Linux 서버에서 작업하고 있습니다.

GGG12345_abb.txt 
GGG12346_abc.txt 
GGG12347_cbx.txt 
.
.
GGG19045_jha.txt 

각 카테고리는 카테고리에 해당합니다. 예를 들면 다음과 같습니다.

myname1 
myname2
.
.
myname12

또한 name 및 id, 부분 myname*GGG인덱스(none _xxx.txt) 라는 두 개의 열이 있는 인덱스 텍스트 파일이 있습니다.

12_12_myname1_abc GGG12345
12_15_myname1_abc GGG12346
.
.
11_15_myname2_abc GGG12353

하위 디렉터리 등을 만들었습니다 MYNAME1. MYNAME2인덱스 파일에서 파일 인덱스를 선택하고 해당 텍스트 파일을 관련 하위 디렉터리로 이동하려면 어떻게 해야 합니까? 예를 들어 GGG12345_abb.txt카테고리를 myname1디렉토리로MYNAME1

답변1

아래 스크립트가 귀하의 요구 사항을 충족하는지 확인하십시오.

while IFS="[ _]" read a b dir c file ; do echo mv -t ${dir^^} ${file}* ; done < index.file

그런 다음 삭제하십시오 echo.

답변2

메타데이터 파일에 이 내용이 있는 경우:

12_12_내 이름 1_알파벳GGG12345

GGG12345_ 파일을 복사해야 함을 의미합니다.알파벳.txt가 디렉터리에 있음내 이름 1awk를 사용하여 메타데이터 파일을 구문 분석하고 파일을 복사할 수 있습니다.

awk '{ x = split($1, arr, "_"); arr[3] = toupper(arr[3]); s = "mv " $2 "_" arr[4] ".txt " arr[3]; } { system(s); }' metadata

system명령이 수행하는 작업을 확인하기 위해 먼저 사용하지 않고도 테스트할 수 있습니다 .

awk '{ x = split($1, arr, "_"); arr[3] = toupper(arr[3]); s = "mv " $2 "_" arr[4] ".txt " arr[3]; } { print s; }' metadata

abc가 포함된 경우:

12_12_내 이름 1_알파벳GGG12345

이는 중요하지 않습니다. 예를 들어 GGG12345 및 MYNAME1만 필요합니다.

awk '{ x = split($1, arr, "_"); arr[3] = toupper(arr[3]); s = "mv " $2 "* " arr[3]; } { system(s); }' metadata

이번에도 다음을 사용하지 않고 테스트할 수 있습니다 system.

awk '{ x = split($1, arr, "_"); arr[3] = toupper(arr[3]); s = "mv " $2 "* " arr[3]; } { print s; } ' metadata

관련 정보