[英]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.