2자리 숫자 형식의 Mv 파일

2자리 숫자 형식의 Mv 파일

다음 파일의 이름을 일괄적으로 바꾸고 싶습니다.

"02 CD 01 나의 노래.mp3"

도착하다

"CD 01 나의 노래 02.mp3"

Bash에서 어떻게 할 수 있나요? 모든 숫자는 두 자리 형식입니다(1-9 앞에 0이 옴).

파일 목록:

01 Disc 01 My Song.mp3
02 Disc 01 My Song.mp3
03 Disc 01 My Song.mp3
04 Disc 01 My Song.mp3
05 Disc 01 My Song.mp3
06 Disc 01 My Song.mp3
07 Disc 01 My Song.mp3
08 Disc 01 My Song.mp3
09 Disc 01 My Song.mp3

답변1

IIUC에서는 프로그램의 Perl 구현을 사용할 수 있습니다 ( 패키지의 일부인 rename다른 프로그램이 있습니다 ). 예 - 먼저 질문에 제공한 파일 목록을 다시 만들어 보겠습니다.renameutil-linux

$ touch 0{1..9}\ Disc\ 01\ My\ Song.mp3
$ ls -l
total 0
-rw-r--r-- 1 ja users 0 Mar 30 01:41 01 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 02 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 03 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 04 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 05 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 06 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 07 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 08 Disc 01 My Song.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:41 09 Disc 01 My Song.mp3

다시 실행 rename하고 파일 나열::

$ rename 's,([0-9]+) Disc 01 My Song.mp3,Disc 01 My song $1.mp3,' *
$ ls -l
total 0
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 01.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 02.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 03.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 04.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 05.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 06.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 07.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 08.mp3
-rw-r--r-- 1 ja users 0 Mar 30 01:42 Disc 01 My song 09.mp3

답변2

다음을 시도해 볼 수 있습니다.

for f in *.mp3; do 
  foo=$(echo "${f%.*} ${f%%[^0-9]*}.mp3")
  mv "$f" "${foo#[0-9]* }"
done

결과 :

'Disc 01 My Song 01.mp3'
'Disc 01 My Song 02.mp3'
'Disc 01 My Song 03.mp3'
'Disc 01 My Song 04.mp3'
'Disc 01 My Song 05.mp3'
'Disc 01 My Song 06.mp3'
'Disc 01 My Song 07.mp3'
'Disc 01 My Song 08.mp3'
'Disc 01 My Song 09.mp3'

답변3

배쉬 솔루션. 여기에는 -a내장된 플래그 read와 명령 대체 및 문자열을 사용하세요 .

for f in *.mp3; do
  renamed=$(
    read -ra var <<< "$f"
    printf '%s' "${var[1]} ${var[2]} ${var[3]} ${var[4]%.*} ${var[0]/%/.${var[4]##*.}}"
  )
  echo mv -v -- "$f" "$renamed"
done

echo결과가 만족스러우면 삭제하세요.

관련 정보