텍스트 파일과 일치하도록 파일 이름을 일괄적으로 바꾸도록 이 명령을 수정하는 방법 [닫기]

텍스트 파일과 일치하도록 파일 이름을 일괄적으로 바꾸도록 이 명령을 수정하는 방법 [닫기]
for file in *; do read line;  mv -v "${file}" "${line}";  done < /var/www/html/uploads/songs.txt

700개의 파일을 모두 변경하는 것과 같은 방식으로 작동합니다. 그러나 그것은 올바른 순서로 진행되지 않는 것 같습니다. 이름이 바뀌기 때문에 순서가 바뀌는 것 같은 느낌이 듭니다. 아니면 100% 확실하지 않습니다.

예를 들면 다음과 같습니다. 첫 번째 파일은 다음과 같습니다.

/var/www/html/uploads/Music/A.D.I.D.A_S - Live (Korn Live).mp3_Rare_2006_.mp3

먼저 텍스트 파일에서 이름을 다음과 같이 바꿉니다.

/var/www/html/uploads/Music/A_D_I_D_A_S__Live_Korn_Live__.mp3_Rare_2006_.mp3

내가 말했듯이, 그것들은 모두 이름이 바뀌었고 많은 것들이 일치합니다. 일반적으로 처음과 마지막 몇 개입니다. 그러나 중간 부분이 올바른 순서를 유지하지 못하는 것 같아서 결국 다른 파일 이름이 생성됩니다.

답변1

IMHO 이것은 매우 위험한 기술입니다. 디렉터리의 모든 변경 사항(파일 추가/제거)에 의해 영향을 받게 됩니다. 더 안전한 기술은 이전 이름과 새 이름을 쌍으로 나열하는 것입니다.

  • 기존 파일을 반복하여 grep새 이름을 검색합니다.
  • 전체 목록을 연관 배열로 로드합니다(최신 버전의 bash에서는 문자열을 사용하여 배열을 인덱싱할 수 있음).
  • 이 모든 복잡성을 포기하고 목록의 줄 시작 부분에 "mv"를 추가하고 스크립트로 사용하십시오.

다음을 사용하여 쌍 목록을 생성할 수 있습니다.

ls pattern_for_old* | paste - list_of_new_names >combined.lst

(그런데 이 목록을 생성하는 것만으로도 현재 문제가 어디에 있는지 알 수 있습니다...)

관련 정보