특정 디렉토리의 파일 이름에서 접두사와 접미사를 제거하는 방법은 무엇입니까?

특정 디렉토리의 파일 이름에서 접두사와 접미사를 제거하는 방법은 무엇입니까?

동일한 접두사와 동일한 접미사를 가진 파일이 많이 있습니다. 파일 이름에서 두 가지를 모두 제거하고 싶습니다. 둘 다 공백을 포함합니다.

그러므로 그것은 될 것이다 foo bar XXX doo par.jpg.foo bar YY YY doo par.jpgXXX.jpgYY YY.jpg

답변1

이름:

설정:

$ mkdir test && cd test
$ > "foo bar XXX doo par.jpg"; > "foo bar YY YY doo par.jpg"

행동:

$ rename -n 's/^foo bar //; s/ doo par(\.[^.]*)$/$1/'  *
  foo bar XXX doo par.jpg renamed as XXX.jpg
  foo bar YY YY doo par.jpg renamed as YY YY.jpg

( -n이러한 작업을 실제로 수행하기 위해 제거되었습니다)

답변2

파일 이름이 변수에 있는 경우 접두사를 제거하는 정식 방법은 다음과 같습니다.

removepre="foo bar "
filename="foo bar XXX doo par.jpg"
filename="${filename#"$removepre"}"
echo "$filename"

제공한 접미사의 문제점은 확장자를 유지하려고 하므로 길이가 약간 길어진다는 것입니다.

removesuf=" doo par"
filename="foo bar XXX doo par.jpg"
extension="${filename##*.}"            ### store extension in a variable.
filename="${filename%.*}"              ### remove extension.
filename="${filename%"$removesuf"}"    ### remove suffix.
filename="$filename.$extension"        ### re-place the extension
echo "$filename"

모든 것이 스크립트에 추가됩니다.

#!/bin/bash
filename="$1"

removepre="foo bar "
filename="${filename#"$removepre"}"

removesuf=" doo par"
extension="${filename##*.}"            ### store extension in a variable.
filename="${filename%.*}"              ### remove extension.
filename="${filename%"$removesuf"}"    ### remove suffix.
filename="$filename.$extension"        ### re-place the extension
echo "$filename"

호출 스크립트는 다음과 같습니다.

$ ./script "foo bar XXX doo par.jpg"
XXX.jpg"

공백이 포함된 파일 이름을 처리하려면 따옴표를 이해하는 것이 필요합니다.

관련 정보