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


12

폴더에 많은 파일이 있으며 접두사 또는 접미사 ( 둘 다 아님)를 추가하고 싶습니다 . 나는 여기 를 확인하고 내가 사용할 수 있음을 발견했다

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

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

그러나 나는 할 수 있기를 원합니다

  • (즉, 이름 변경 sufix 추가 filename.extfilename.whatever.ext)
  • 접두사 또는 접미사가 이미 있는지 확인한 다음 건너 뛰십시오.
  • 같은 인수 받아 별칭 만들기 addprefix whatever *.ext또는addsufix whatever *.*

답변:


10

을 사용하는 bash경우이 one-liner가 대신 할 수 있습니다 (변수 $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

거의 완벽합니다! (1) 접두사 또는 접미사가 이미 있는지 확인한 다음 건너 뛰고 (2) 확장자가없는 파일에서 작업하면 완벽합니다. 귀찮게해서 죄송합니다.
그 브라질 가이

(1)의 경우 mv를 래핑하여 접두사 확인을 추가 if [ $f == $prefix* ]할 수 if [ $f == *$suffix$([ ! -z $extension ] && echo -n '.')$extension ]있고 addsuffix의 mv 명령을 사용하여 접미사를 변경할 수 있습니다 . (2) 내가 끔찍한 프로그래머가 아닌 한 확장명이없는 파일에서 이미 작동해야합니다.
Aaron Okano

7

있다 rename명령 트릭을해야한다. 그러나라는 여러 가지 다른 명령이 rename있으므로 perlexpr인수로 예상되는 Perl 스크립트를 가지고 있는지 확인하십시오 . 이 패키지는 데비안 및 파생 제품 (Ubuntu, Mint 등) rename에서 perl패키지로 제공되는 명령 이지만이라는 다른 유틸리티가있는 다른 배포판에는 없습니다 rename.

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

보시다시피, 그것은 pot 등원입니다 -접두사를 여러 번 호출 할 때 접두사를 다시 추가하지 않습니다.

문자열의 길이가 0 인 시작 ( ^) 또는 시작 다음에 선택적 prefix문자열 ( )을 대체하여 작동합니다 prefix.

나는 이것을 쉘 스크립트 또는 쉘 함수로 캡슐화하여 당신을위한 연습으로 남겨 둘 것이다 :)

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


좋은 대답이지만 더 보편적 인 것을 찾고있었습니다. 이 답변을 위해서는 perl 과이 특정 (또는 동등한) 둘 다 필요합니다 rename. 그리고 접미사가 조금 더 어렵다는 것을 알고 있습니다. 링크 된 질문에서 다루지 않았으며 저는 리눅스, bash, shell script, perl 및 regular expressions의 초보자입니다. ! :)
그 브라질 사람

4

zsh:

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

~그 수단은 로빙 연산자 제외시켰다 에서이 zsh.


1

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

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

데이터를 변경하기 전에 데이터에 미치는 영향을 확인하려면 mvecho로 바꾸십시오.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.