디렉토리의 하위 디렉토리 이름 끝을 추출합니다.

디렉토리의 하위 디렉토리 이름 끝을 추출합니다.

다음과 같은 샘플 하위 디렉터리 이름이 있습니다.

  • 테스트_ABCDEF_406_1
  • 테스트_ABCDEF_AOH_1
  • 테스트_ABCDEF_AUQ_1

Test라는 더 큰 디렉터리에 있습니다.

"ABCDEF_**를 효율적으로 제거하는 방법_" 또는 Test_ 이후의 모든 항목을 사용하여 다음을 얻습니다.

  • ABCDEF_406_1
  • ABCDEF_AOH_1
  • ABCDEF_AUQ_1

차이점이 있는 경우 위의 내용은 파일이 아니라 폴더라는 점에 유의하세요.

답변1

하위 디렉터리의 경로 이름을 반복하고 매개변수 대체를 사용하여 초기 부분을 제거합니다.

#!/bin/sh

for dirpath in Test/Test_*/; do
    # Because of the pattern used above, we know that
    # "$dirpath" starts with the string "Test/Test_",
    # and this means we know we can delete that:

    # But first delete that trailing /
    dirpath=${dirpath%/}

    shortname=${dirpath#Test/Test_}

    printf 'The shortened name for "%s" is "%s"\n' "$dirpath" "$shortname"
done

${variable#pattern}대체품은 (가장 짧은) 일치 항목이 제거되는 표준 대체품입니다.pattern시작$variable.

마찬가지로, 제거되는 코드에서 후행 최단 일치 항목을 ${variable%pattern}제거하는 데 사용됩니다./pattern$variable.

다음 디렉터리 트리에서 테스트합니다.

.
`-- Test/
    |-- Test_ABCDEF_406_1/
    |-- Test_ABCDEF_AOH_1/
    `-- Test_ABCDEF_AUQ_1/

이 코드는

The shortened name for "Test/Test_ABCDEF_406_1" is "ABCDEF_406_1"
The shortened name for "Test/Test_ABCDEF_AOH_1" is "ABCDEF_AOH_1"
The shortened name for "Test/Test_ABCDEF_AUQ_1" is "ABCDEF_AUQ_1"

관련 정보