
다음 파일의 이름을 대량으로 바꾸고 싶습니다.
"02 디스크 01 나의 노래.mp3"
에게
"디스크 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
또 다른 프로그램이 있습니다 ). 예 - 먼저 질문에 제시한 파일 목록을 다시 만들어 보겠습니다.rename
util-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
결과가 만족스러우면 제거하세요 .