답변1
우리가 말하면"샘플 이름입니다"현재 파일 이름 위의 문자열입니다. .mkv
즉, 주어진
$ cat file.txt
Taken S01 E01
74857.mkv
Taken S01 E02
74858.mkv
당신이 실제로 원하는
74857.mkv > 촬영 S01 E01.mkv
74858.mkv > 촬영 S01 E02.mkv
그런 다음 GNU를 사용 parallel
하고 다음을 수행하십시오 mv
.
parallel -N2 echo mv -- {2} {1}.mkv < file.txt
echo
올바른 명령을 작성하고 있다고 확신하면 제거하십시오.
답변2
내가 당신이라면 이 작업을 작은 배치로 수행하고 복사본으로 테스트하겠지만 이와 같은 것이 당신에게 적합할 것입니다.
while read n; do read f; mv $f "$n.${f##*.}"; done < file
시작하기 전에 출력을 확인하는 것이 좋습니다.
while read n; do read f; echo mv $f "$n.${f##*.}"; done < file > checkfile
이름이 바뀐 파일에 오류가 없는지 확인하십시오.
만족할 때까지 원본을 안전하게 보관할 수 있도록 복사본을 만들 수 있는 충분한 공간과 시간이 있다면 더 안전합니다...
while read n; do read f; cp $f "/a/safe/location/$n.${f##*.}"; done < file
노트
mv
프로세스를 되돌리려면 명령에서 이름의 순서를 바꾸면 됩니다.
mv "$n.${f##*.}" $f
답변3
그리고 perl
:
perl -lne '$dst = "$_.mkv"; $src = <>; chomp $src; rename $src, $dst
or warn "$src -> $dst: $!\n"' your-file
그리고 zsh
:
zmodload zsh/files # to get a builtin mv
while IFS= read -ru3 dst && IFS= read -ru3 src; do
mv -- "$src" "$dst.mkv"
done 3< your-file