Abs*_*Abs 0 linux shell ffmpeg
我找到了一个有用的shell脚本,以递归方式显示目录中的所有文件.
它打印文件名的位置echo "$i"; #Display File name.
我想改为在非MP3文件上运行ffmpeg命令,我该怎么做?我对shell脚本的知识非常有限,所以如果我被勺子喂食,我会很感激!:)
//if file is NOT MP3
ffmpeg -i [the_file] -sameq [same_file_name_with_mp3_extension]
//delete old file
Run Code Online (Sandbox Code Playgroud)
这是shell脚本供参考.
DIR="."
function list_files()
{
if !(test -d "$1")
then echo $1; return;
fi
cd "$1"
echo; echo `pwd`:; #Display Directory name
for i in *
do
if test -d "$i" #if dictionary
then
list_files "$i" #recursively list files
cd ..
else
echo "$i"; #Display File name
fi
done
}
if [ $# -eq 0 ]
then list_files .
exit 0
fi
for i in $*
do
DIR="$1"
list_files "$DIR"
shift 1 #To read next directory/file name
done
Run Code Online (Sandbox Code Playgroud)
您可以使用查找单行做同样的事情.假设您要处理的文件都是wav:
find /path/ -type f -name "*wav" -exec ffmpeg -i {} -sameq {}.mp3 \;
Run Code Online (Sandbox Code Playgroud)
如果要查找"rm"文件,并在转换后删除它们:
find /path/ -type f -name "*.rm" -exec ffmpeg -i {} -sameq {}.mp3 && rm {} \;
Run Code Online (Sandbox Code Playgroud)
也就是说,如果你想用你展示的shell脚本来做,那就走吧
echo "$i";
Run Code Online (Sandbox Code Playgroud)
用这个替换它:
ffmpeg -i "$i" -sameq "$i".mp3
Run Code Online (Sandbox Code Playgroud)
$ i是一个变量.几行,你有:
for i in *
Run Code Online (Sandbox Code Playgroud)
这基本上意味着"对于*中的每个元素(反过来代表当前目录中的所有文件,它就是所谓的"shell扩展"),将元素/文件的名称放在变量i中,然后执行所有"do"和"done"之间的代码".因此,对于每次迭代,我将包含此目录中其中一个文件的名称.
还有一个部分测试我是否是一个目录,如果是,它递归列出其内容.
快速的最后一点:\; 在find命令的末尾是重要的,它需要在反斜杠之前有一个空格,否则它将无法工作.