무작위로 이름이 지정된 다수의 파일 이름을 한 번에 바꾸는 방법은 무엇입니까?

무작위로 이름이 지정된 다수의 파일 이름을 한 번에 바꾸는 방법은 무엇입니까?

디렉토리에는 무작위로 이름이 지정된 파일이 많이 있습니다 '.wav'. 예를 들어

090913yui.wav
jiyafa123.wav
.
.
.
awe-6rt.wav

파일명을 다음으로 바꾸고 싶어요

file1.wav
file2.wav
.
.

등.

누구든지 같은 작업을 수행하는 방법을 도와줄 수 있습니까? 터미널을 통해서만 서버에 접속할 수 있어요. 따라서 몇 가지 명령만 사용하면 됩니다.

답변1

파일 이름 와일드카드 패턴이 *.wav변경하려는 모든 이름과 일치한다고 가정하면 다음 루프를 사용하여 원하는 방식으로 일치하는 이름의 이름을 바꿀 수 있습니다.

n=1
for name in *.wav; do
    while [ -e "file$n.wav" ]; do n=$((n+1)); done
    mv -- "$name" "file$n.wav"
done

이는 일치하는 모든 이름을 반복합니다. 각 이름에 대해 $n이름이 file$n.wav아직 존재하지 않는 정수를 찾습니다 . 그런 다음 현재 이름을 해당 이름으로 변경합니다.

답변2

사용진주의rename(모든 운영 체제 및 셸에서 작동하며 도구 상자에 있어야 합니다):

rename -n 's/.*/"file" . ++$::c . ".wav"/se' ./*.wav

다음을 제공합니다:

rename(090913yui.wav, file1.wav)
rename(jiyafa123.wav, file2.wav)

또는 제로 패딩을 사용하세요.

rename -n 's/.*/"file" . sprintf("%.3d", ++$::c) . ".wav"/se' ./*.wav

다음을 제공합니다:

rename(./090913yui.wav, file001.wav)
rename(./jiyafa123.wav, file002.wav)

스위치 삭제 -n, 일명.시운전당신의 시도가 만족스러울 때실제 이름으로 변경.

답변3

zsh의 zmv 사용:

autoload -Uz zmv
n=0; zmv -n '*.wav' 'file$((++n)).wav'

또는 l파일이 ls출력 및 기타 대부분의 항목에서 숫자로 정렬 되도록 숫자를 0부터 너비 3까지 채웁니다.

n=0; zmv -n '*.wav' 'file${(l[3][0])$((++n))}.wav'

만족스러우면 삭제 -n(테스트 실행)합니다. 잠재적인 충돌이 있는지 미리 확인합니다.

n일부 파일의 이름이 변경된 경우 기존 파일 중 가장 높은 수로 초기화 file<number>.wav하고 *.wav모드를 로 변경합니다 (^file<->).wav.

관련 정보