디렉토리 이름을 "fname [mname] lname"에서 "lname, fname [mname]"으로 바꿉니다.

디렉토리 이름을 "fname [mname] lname"에서 "lname, fname [mname]"으로 바꿉니다.

저자 이름이 "first [mi] last"(중간 이니셜/이름은 여러 개일 수 있음)인 디렉터리가 여러 개 있고 이를 "last, first mi"로 변경하고 싶습니다. 그래서 이름을 여러 토큰으로 구문 분석한 다음 토큰을 다시 정렬하는 방법을 원합니다.

에서는 awk다음과 같습니다.

ls | awk print '$NF", "  $1,$2 ...'   

답변1

이는 작동해야 하며 쉘 독립적입니다. 단일 인수(예: 기본 디렉터리)를 사용하여 스크립트로 실행합니다.

  1. find제공된 기본 디렉토리 바로 아래에 있고 변환된 디렉토리를 제외하고 한 줄에 하나의 디렉토리 이름을 가져오는 데 사용됩니다 .

  2. awk목록에서 기본 디렉터리를 제거하고 각 줄에서 변경하려는 직접 디렉터리의 이름만 남기는 데 사용됩니다 . ( awk여기서는 /를 필드 구분 기호로 사용하고 각 줄의 마지막 필드를 인쇄합니다.)

  3. awk두 번째 인쇄 명령을 사용하여 mv요청한 대로 각 디렉터리의 이름을 바꿉니다. ( awk여기에서는 기본 공백이 필드 구분 기호로 사용됩니다.)

  4. 출력을 파일에 저장한 다음 적절해 보일 때 실행하십시오.

.

#!/bin/sh
find "$1" -mindepth 1 -maxdepth 1 -type d -not -name "*,*"|\
awk -F/ '{print $NF}'|\
awk -v DIR="$1" '{printf "mv \"" DIR "/" $0 "\" \"" DIR "/" $NF", "; for (i=1; i<NF; i++) {printf $i" "}; printf "\"\n"}'

관련 정보