重命名照片以匹配视频标题

重命名照片以匹配视频标题

我有一台基本上自动化的媒体服务器,目前所有内容都放入一个文件夹中,并按文件扩展名整理到正确的位置。

目前,照片的名称为“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

例子

考虑三个目录 、dir1dir2dir3,其中包含文件:

$ 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"' \;

相关内容