簡體   English   中英

如何在Linux Shell腳本中更改文件擴展名?

[英]How to change file extension in Linux shell script?

我已經找到了在類似情況下執行此操作的一些示例,但這是我編寫的唯一的腳本,除了逐字逐行運行命令外,它還可以執行其他任何操作,因此我正在努力將這些示例應用於自己的情況,並且需要一些手工操作保持<3

我只是想從MP4批處理翻錄音頻。 該腳本有效:

for f in *.mp4; 
    ffmpeg -i "$f" -f mp3 -ab 192000 -vn "mp3s/$f.mp3"
done

但是文件都以.mp4.mp3結尾。 我如何擺脫mp4部分?

如果您正在使用bash

${f%%.mp4}

將提供不帶.mp4擴展名的文件名。

嘗試像這樣使用它:

for f in *.mp4; do
    ffmpeg -i "$f" -f mp3 -ab 192000 -vn "mp3s/${f%%.mp4}.mp3"
done

...並且不要忘記給定示例中的do關鍵字。

說明

bash手冊( man bash )指出:

$ {parameter%word} $ {parameter %% word}

刪除匹配的后綴模式。 單詞被擴展以產生一個模式,就像路徑名擴展一樣。 如果該模式與參數的擴展值的尾部部分匹配,則擴展的結果是具有最短匹配模式( %'' case) or the longest matching pattern (the %%''情況的參數的擴展值)已刪除。 如果parameter為@或*,則將模式去除操作依次應用於每個位置參數,並且擴展為結果列表。 如果parameter是用@或*下標的數組變量,則將模式刪除操作依次應用於數組的每個成員,並且擴展為結果列表。

這只是可以對shell變量執行的許多字符串操作之一。 它們都以Parameter Expansion的名稱命名。

這也是bash手冊中給出的部分標簽。 因此, man bash / paramter exp應該可以帶您快速到達那里。 `

以下命令更改當前目錄下所有文件的文件擴展名。

find . -depth -name "*.c" -exec sh -c 'dname=$(dirname {}) && fname=$(basename {} .c) && mv {} $dname/$fname.h' ";"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM