所以我想更改目錄及其子目錄中所有電影的元標題
for file in *; do
if [[ $file == *.mkv ]]
then
mkvpropedit --set "title=$file" "$file";
elif [[ $file == *.mp4 ]]
then
exiftool "-Title<Filename" *.mp4 -overwrite_original -r
else
echo "$file wrong filename"
fi
done
到目前為止,這是我的一般想法,但它沒有找到檔案。這些命令應該可以作業,但甚至沒有輸入 if 條件。也只是使用 * 不搜索子目錄。
uj5u.com熱心網友回復:
您可以使用兩個find命令:
find . -type f -name '*.mkv' -exec mkvpropedit --set "title={}" "{}" \;
find . -type f -name '*.mp4' -exec exiftool "-Title<Filename" "{}" -overwrite_original -r \;
第一個find遞回地在作業目錄中搜索名稱以 結尾的任何檔案.mkv,然后運行以下命令(即,該命令是-exec和之間的所有內容\;),用{}檔案名替換所有s。
第二個find基本上做同樣的事情,但對于名稱以.mp4.
有關更多資訊find,請參閱其 Linux 手冊頁或GNU 手冊。
如果只想獲取檔案名來設定標題,可以使用以下命令:
find . -type f -name '*.mkv' -exec sh -c 'mkvpropedit --set "title=$(basename "$1")" "$1"' sh '{}' \;
basename 將路徑作為引數并僅回傳路徑的最后一部分(即目錄名或檔案名)。
sh -c 'mkvpropedit --set "title=$(basename "$1")" "$1"' sh '{}'sh與命令一起運行mkvpropedit --set "title=$(basename "$1")" "$1",其中命令的引數 ( $1) 是find. (檔案名以這種方式作為引數傳遞以避免命令注入。)
uj5u.com熱心網友回復:
此腳本將嘗試以遞回方式編輯指定目錄中的所有相關檔案:
#!/bin/sh
target_dir=${1:?no target dir provided}
cd "$target_dir" || exit 1
# pass the mkv file paths to a shell loop, to strip the leading path
find . -mindepth 1 -type f -iname '*.mkv' \
-exec sh -c '
for i do
name=${i##*/}
mkvpropedit --set title="$name" "$i"
done
' _ {}
# exiftool can target specific extensions, and operate recursively
# use -r. to include hidden sub-directories
exiftool -r -ext mp4 -overwrite_original -Title'<Filename' .
像/path/to/myscript /path/to/media-dir.
兩個命令的檔案擴展名都不區分大小寫。
請記住,您可以使用.來定位當前目錄。如果需要,如果沒有給出引數,您可以將腳本更改為默認使用當前目錄。
我用過sh。為 bash 撰寫將是相同的。
uj5u.com熱心網友回復:
隨著bash> = 4.0:
shopt -s globstar # enable globstar
for file in **; do
case "${file##*.}" in # extract suffix
mkv) echo "do something with $file"
;;
mp4) echo "do something with $file"
;;
*) echo "unknown suffix at $file"
;;
esac
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/368387.html
