동일한 접두사와 동일한 접미사를 가진 파일이 많이 있습니다. 파일 이름에서 두 가지를 모두 제거하고 싶습니다. 둘 다 공백을 포함합니다.
그러므로 그것은 될 것이다 foo bar XXX doo par.jpg
.foo bar YY YY doo par.jpg
XXX.jpg
YY 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"
공백이 포함된 파일 이름을 처리하려면 따옴표를 이해하는 것이 필요합니다.