다음과 같은 샘플 하위 디렉터리 이름이 있습니다.
- 테스트_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"