如何在 Ubuntu 中使用此命令列

如何在 Ubuntu 中使用此命令列

我以範例的形式提出我的問題...我有一個資料夾,其中包含幾個子資料夾,如下主資料夾==)Got、Vikings 等。文件。在 Windows 環境中,在主資料夾 make mkvmerge 中執行此指令可混合此目錄中的整個影片和對應的 srt 檔案。

For /R %%A IN (*.mkv *.mp4) Do (
    "C:/Program Files/MKVToolNix\mkvmerge.exe" -o "%%~dpnxAtemp" "%%~fA" "%%~dpnA.srt" && if errorlevel 2 (
        echo errors generated during remuxing, original file not deleted
    ) else if errorlevel 1 (
        del /f "%%~fA" "%%~dpnA.srt" echo Warnings generated during remuxing to "%%~A", original file deleted
    ) else (
        del /f "%%~fA" "%%~dpnA.srt" echo Successfully remuxed to "%%~A", original file deleted
    ) && for /R %%A IN (*.mkvtemp *.mp4temp) do ren "%%~fA" "%**.mkv"
)
Pause

答案1

程式碼包含一些錯誤,但我透過以下方式理解它:1

對所有物件執行以下命令*.mkv*.mp4遞歸找到:

  1. mkvmerge每個文件及其相應的*.srt.
  2. 如果成功(警告或乾淨退出):
    • 刪除輸入檔。
    • 將建立的檔案重新命名為<original_name>.mkv.

這可以在 Ubuntu 上使用以下腳本來完成。
使用它需要您自擔風險,我還沒有完全測試它!

#!/bin/bash
find . -name \*.mp4 -o -name \*.mkv | while read orig_filename
do
   filename="${orig_filename::-4}"  # crop the extension
   mkvmerge -o "$orig_filename.tmp" "$orig_filename" "$filename.srt"
   if [ $? -le 1 ]  # warning or clean exit
   then
       rm "$orig_filename" "$filename.srt"
       mv "$orig_filename.tmp" "$filename.mkv"
   fi
done

在運行此腳本之前,您需要安裝mkvmergeUbuntu 程式:

sudo apt install mkvtoolnix

1為了簡單起見,我省略了錯誤訊息。根據評論,它們似乎對於腳本來說並不是必需的。

相關內容