簡體   English   中英

Bash腳本以遞歸搜索和重命名

[英]Bash script to search and rename recursively

我有一個bash腳本,可將* .mkv文件轉換為* .avi文件。 看起來是這樣的:

#!/bin/bash
for f in $(ls *mkv | sed ‘s/\(.*\)\..*/\1/’)
do
ffmpeg -i $f.mkv -sameq $f.avi
done

但是,我需要此腳本來執行的操作是,它需要在所有文件夾中遞歸搜索* .mkv文件,然后運行ffmpeg命令並將輸出保存到同一目錄。

請有人可以幫我嗎? :-)

find /some/path -name '*.mkv' | while read f
do
    ffmpeg -i "$f" -sameq "${f:0:-4}.avi"
done

嘗試這樣:

find <file_path> -name '*.mkv' -exec sh -c 'mv "$0" "${0%%.mkv}.avi"' {} \;
#!/bin/bash
find . -name "*.mkv" -exec ffmpeg -i {} -sameq `basename {} .mkv`.avi \;

感謝@Raul,這對我有用,也是我想要做的解決方案,它通過目錄遞歸運行,並在mkv文件上運行ffmpeg命令:

#!/bin/bash
find <file_path> -name '*.mkv' -exec sh -c 'ffmpeg -i "$0" -sameq "${0%%.mkv}.avi"' {} \;
exit;

代替ls *.mkv使用find . -name "*.mkv" find . -name "*.mkv"

這假定沒有有趣的文件名(沒有空格,換行符)。 另一種可能性是將findxargs結合使用。 xargs手冊具有指導意義,可以節省您一天的腳本編寫時間:-)

暫無
暫無

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

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