![비디오 제목과 일치하도록 사진 이름 바꾸기](https://linux55.com/image/154243/%EB%B9%84%EB%94%94%EC%98%A4%20%EC%A0%9C%EB%AA%A9%EA%B3%BC%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8F%84%EB%A1%9D%20%EC%82%AC%EC%A7%84%20%EC%9D%B4%EB%A6%84%20%EB%B0%94%EA%BE%B8%EA%B8%B0.png)
기본적으로 자동화된 미디어 서버가 있고 현재 모든 것이 폴더에 들어가고 파일 확장자별로 올바른 위치로 구성되어 있습니다.
현재 사진 이름은 "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
, dir2
및 dir3
를 고려하십시오.
$ 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"' \;