繁体   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