비디오 제목과 일치하도록 사진 이름 바꾸기

비디오 제목과 일치하도록 사진 이름 바꾸기

기본적으로 자동화된 미디어 서버가 있고 현재 모든 것이 폴더에 들어가고 파일 확장자별로 올바른 위치로 구성되어 있습니다.

현재 사진 이름은 "folder.jpg"이며 영화 이름과 일치하도록 이름을 바꿔야 합니다.

현재 모습: 이전:

  • /목차/

    • 폴더.jpg
    • 영화.mp4
    • 영화.xml

내가 원하는 모습: 이후:

  • /목차/

    • 영화.jpg
    • 영화.mp4
    • 영화.xml

jpg를 mp4와 어떻게 일치시키나요?

답변1

노력하다:

for movie in ./*/*.mp4; do mv -- "${movie%/*}/folder.jpg" "${movie%.mp4}.jpg"; done

${movie%/*}그리고 ${movie%.mp4}그것들은 모두 예입니다접미사 제거. ${movie%/*}영화 파일이 있는 디렉터리를 반환하고, ${movie%.mp4}확장자를 뺀 영화 파일 이름을 반환합니다 .mp4.

파일이 포함된 3개의 디렉토리, dir1, dir2dir3를 고려하십시오.

$ ls -1 */*
dir1/Animal Crackers.mp4
dir1/Animal Crackers.xml
dir1/folder.jpg
dir2/folder.jpg
dir2/Monkey Business.mp4
dir2/Monkey Business.xml
dir3/Duck Soup.mp4
dir3/Duck Soup.xml
dir3/folder.jpg

이제 다음 명령을 실행하세요.

$ for movie in ./*/*.mp4; do mv -- "${movie%/*}/folder.jpg" "${movie%.mp4}.jpg"; done

명령을 실행한 후 파일은 다음과 같습니다.

$ ls -1 */*
dir1/Animal Crackers.jpg
dir1/Animal Crackers.mp4
dir1/Animal Crackers.xml
dir2/Monkey Business.jpg
dir2/Monkey Business.mp4
dir2/Monkey Business.xml
dir3/Duck Soup.jpg
dir3/Duck Soup.mp4
dir3/Duck Soup.xml

여러 줄 버전

여러 줄에 걸쳐 명령을 분산시키려는 경우:

for movie in ./*/*.mp4
do
    mv -- "${movie%/*}/folder.jpg" "${movie%.mp4}.jpg"
done

답변2

find . -type f -name "*.mp4" -execdir bash -c ' [[ -f folder.jpg ]] && mv -v folder.jpg "$(basename {} .mp4).jpg"' \;

관련 정보