我有一个主要是自动化的媒体服务器,目前所有内容都放在一个文件夹中,并按文件扩展名整理到正确的位置。
目前照片以“folder.jpg”命名,我需要重命名它们以匹配电影名称。
现在的样子: 之前:
/目录/
我需要它看起来像什么:之后:
/目录/
我将如何将 jpg 匹配到 mp4。
尝试:
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
。
考虑三个包含文件的目录 、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
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)