터미널의 .txt 파일 목록에 따라 파일 이름을 변경합니다.

터미널의 .txt 파일 목록에 따라 파일 이름을 변경합니다.

여러 오디오 파일의 이름을 바꾸려고 합니다. 이름은 "1 Audio Track.aiff" 등입니다. 이전 파일 이름과 새 파일 이름이 탭으로 구분된 .txt 파일이 있습니다. 예를 들어, .txt 파일에는 다음이 표시됩니다. 1 Audio Track.aiff Blues in Orbit.

파일이 있는 디렉터리에서 이 코드를 실행합니다.

 for oldname newname in $(cat filenames.txt); do
 mv "$oldname" "$newname"
 done

.txt 파일도 같은 디렉터리에 있습니다. 그러나 코드가 실행되면 다음과 같은 메시지가 표시됩니다. 해당 파일이나 디렉터리가 없습니다. 파일 이름을 1로 변경한 다음 이전 파일 이름 1과 새 파일 이름(Artur라고 가정)을 사용하여 .txt 파일을 생성하면 작동합니다. 문제는 .txt 파일의 구문으로 인해 발생한 것 같지만 공백을 사용하도록 할 수 없습니다. 터미널은 Orbit의 1 Audio Track Blues를 파일 1을 오디오로 변경하는 등으로 해석합니다. 작은따옴표와 큰따옴표, 괄호로 묶어서 사용해 보았습니다. 공백을 시뮬레이션하기 위해 백슬래시도 추가했습니다. 어떤 아이디어가 있나요? 귀하의 도움에 매우 감사드립니다.

답변1

어쩌면 다음과 같이 시도해 볼 수도 있습니다.

while IFS=$'\t' read -r oldname newname 
do
 mv -- "$oldname" "$newname"
done < filenames.txt

이렇게 하면 IFS파일에서 읽을 구분 기호( )를 설정하고 bash가 공백에서 줄을 나누지 않도록 할 수 있습니다.

관련 정보