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

Rob*_*rtW 3 bash rename files

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

目前照片以“folder.jpg”命名,我需要重命名它们以匹配电影名称。

现在的样子: 之前:

  • /目录/

    • 文件夹.jpg
    • 电影.mp4
    • 电影.xml

我需要它看起来像什么:之后:

  • /目录/

    • 电影.jpg
    • 电影.mp4
    • 电影.xml

我将如何将 jpg 匹配到 mp4。

Joh*_*024 7

尝试:

for movie in ./*/*.mp4; do mv -- "${movie%/*}/folder.jpg" "${movie%.mp4}.jpg"; done
Run Code Online (Sandbox Code Playgroud)

${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
Run Code Online (Sandbox Code Playgroud)

现在,运行我们的命令:

$ for movie in ./*/*.mp4; do mv -- "${movie%/*}/folder.jpg" "${movie%.mp4}.jpg"; done
Run Code Online (Sandbox Code Playgroud)

运行我们的命令后,文件是:

$ 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
Run Code Online (Sandbox Code Playgroud)

多行版本

对于那些喜欢将命令分散到多行的人:

for movie in ./*/*.mp4
do
    mv -- "${movie%/*}/folder.jpg" "${movie%.mp4}.jpg"
done
Run Code Online (Sandbox Code Playgroud)