Bash

重命名照片以匹配影片標題

  • May 26, 2019

我有一個主要是自動化的媒體伺服器,目前所有內容都放入一個文件夾並按文件副檔名分類到正確的位置。

目前照片以“folder.jpg”命名,我需要重命名它們以匹配電影名稱。

現在的樣子: 之前:

  • /目錄/

    • 文件夾.jpg
    • 電影.mp4
    • 電影.xml

我需要它看起來像什麼:之後:

  • /目錄/

    • 電影.jpg
    • 電影.mp4
    • 電影.xml

我將如何將 jpg 與 mp4 匹配。

嘗試:

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

${movie%/*}並且${movie%.mp4}都是後綴去除的例子。${movie%/*}返回電影文件所在的目錄,並${movie%.mp4}返回電影文件的名稱減去副檔名.mp4

例子

考慮三個目錄,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

引用自:https://unix.stackexchange.com/questions/521139