bash 쉘의 양쪽에 확장자가 없는 파일을 나열하지만 원본 파일은 유지합니다.

bash 쉘의 양쪽에 확장자가 없는 파일을 나열하지만 원본 파일은 유지합니다.

다음 파일에서 확장자와 접두사를 제거하고 싶습니다.

awstats.www.test1.com.conf
awstats.www.test2.com.conf
awstats.www.test3.com.conf

awstats.및를 삭제 .conf하고 파일은 www.test1.com그대로 두어야 합니다. 어떻게 해야 하나요?

답변1

파일과 동일한 디렉토리에 있다고 가정합니다.

for name in awstats.*.conf; do
    basename "${name#awstats.}" .conf
done

루프 내부의 코드는 먼저 접두사를 제거한 다음 awstats.표준 인수 대체를 사용하여 접미사를 제거 합니다 .$namebasename.conf

다음을 호출하지 않고 두 단계로 수행할 수도 있습니다 basename.

for name in awstats.*.conf; do
    newname=${name#awstats.}  # trim off prefix
    newname=${newname%.conf}  # trim off suffix
    printf '%s\n' "newname"
done

이 두 루프는 파일 이름을 바꾸지 않습니다.

답변2

나는 rename( perl-rename일부 시스템에서는 다른 시스템에서만 rename) 여기가 가장 쉽다고 가정합니다.

rename 's/^awstats\.//;s/\.conf$//' awstats.*.conf

정규식 설명:

  • s/^awstats\.//awstats.줄(파일 이름)의 시작 부분에서는 아무것도 바꾸지 마십시오.
  • s/\.conf$//.conf줄 끝(파일 이름)을 공백으로 바꿉니다.

-n테스트 실행을 위해 이 옵션을 사용하세요 !

관련 정보