저는 상위 디렉토리에 부분적으로 번호가 매겨진 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