접두사 또는 접미사를 추가하여 로컬 폴더의 파일 이름 바꾸기

접두사 또는 접미사를 추가하여 로컬 폴더의 파일 이름 바꾸기

내 폴더에 많은 파일이 있고 접두사 또는 접미사를 추가하고 싶습니다(둘 다) 줘. 나는 확인했다여기사용할 수 있다는 것을 알았습니다

for filename in *.jpg; do mv "$filename" "prefix_$filename"; done;

로 끝나는 모든 파일에 접두사를 추가합니다 .jpg(제거하면 .jpg현재 폴더의 모든 파일에 접두사가 추가됩니다).

그러나 나는 할 수 있기를 바랍니다

  • 접미사를 추가합니다(예: filename.ext로 이름 바꾸기 filename.whatever.ext).
  • 접두사 또는 접미사가 이미 있는지 확인하고 건너뜁니다.
  • addprefix whatever *.ext또는 같은 매개변수를 허용하는 별칭을 만듭니다.addsufix whatever *.*

답변1

사용하는 경우 bash이 한 줄의 코드로 작업을 수행할 수 있습니다(변수가 있고 $prefix쉽게 사용할 수 $suffix있다고 가정).$extension

mv "$filename" "$prefix${filename%.$extension}$suffix.$extension"

스크립트를 이렇게 만들 수 있습니다

#!/bin/bash
# Usage: addprefix <prefix> <files>

prefix=$1
shift
for f in "$@"
do
  mv "$f" "$prefix$f"
done

그리고

#!/bin/bash
# addsuffix <suffix> <files>

suffix=$1
shift
for f in "$@"
do
  extension=${f##*.}
  if [ -z $extension ]; then
    mv "$f" "$f$suffix"
  else
    mv "$f" "${f%.$extension}$suffix.$extension"
  fi
done

답변2

하나 있다rename명령이 정도면 충분합니다. 하지만 주의하세요. 이라는 여러 가지 다른 명령이 있으므로 인수로 a가 필요한 Perl 스크립트 rename가 있는지 확인하세요 . perlexpr이는 Debian 및 그 파생 제품(Ubuntu, Mint 등)의 패키지에서 제공하는 명령이지만 rename다른 유틸리티 이름이 있을 수 있는 다른 배포판에서는 제공되지 않습니다.perlrename

martin@martin ~/test % touch a.txt
martin@martin ~/test % touch b.txt
martin@martin ~/test % rename 's/^(prefix)?/prefix/' *.txt
martin@martin ~/test % ll
insgesamt 0
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixa.txt
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixb.txt
martin@martin ~/test % rename 's/^(prefix)?/prefix/' *.txt
martin@martin ~/test % ll
insgesamt 0
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixa.txt
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixb.txt

보시다시피 그렇죠멱등성- 여러 번 호출해도 접두사는 다시 추가되지 않습니다.

문자열의 (길이가 0인) 시작 부분( ^)을 바꾸거나 prefix시작 부분 뒤에 선택적 문자열을 바꾸는 방식 으로 작동합니다 prefix.

나는 이것을 연습용으로 쉘 스크립트나 쉘 함수로 포장할 것입니다. :)

하지만 Postfix는 파일 이름의 어느 부분이 확장자를 구성하는지 파악해야 하기 때문에 조금 더 어렵습니다.

답변3

그리고 zsh:

autoload zmv # in ~/.zshrc
zmv '(*~*suffix).ext' '${1}suffix.ext'

~와일드카드는 다음을 의미합니다.와는 별개로존재하다 zsh.

답변4

현재 폴더에 있는 모든 이미지의 접두사와 확장자를 변경하는 간단한 예입니다.

prefix=EG_
extension=.jpg
for i in $(ls); do mv $i "$prefix${i%.JPG}$extension";  done

변경하기 전에 데이터에 어떤 영향을 미치는지 확인하려면MV통과에코

IMG_7993.JPG의 출력은 EG_IMG_7993.jpg입니다.

관련 정보