我想编写一个脚本,自动执行以下步骤:每周我将大约 5-10 个视频文件复制到一个目录中,并使用 avcodec 删除每个文件的音频流。我认为这是编写我的第一个 bash 脚本的良好起点。它应该检查目录中的文件名(00001.MTS、00002.MTS,...)并为每个文件执行命令。我来自 python 和 matlab,我可以使用 for 或 while 循环编写此脚本。
我很高兴没有得到我的问题的完成的代码,而是得到了一些我可以找到必要信息的链接。
谢谢,克里斯
答案1
检查man find
。这是一个灵活而强大的工具,每当您听到“目录中的多个文件”时,您都应该考虑它。无论您是想寻找它们(-print),或者在这种情况下运行命令对每一个进行(-exec):
find "$HOME"/some/videos -type f -name "*.MTS" \
-exec av_encoder_too --remove-audio ... {} \;
笔记:
- 末尾的分号需求使用反斜杠进行转义。
- 这
{}
是一个文字一对括号——这就是 find 在运行命令时在找到的每个文件中进行替换的地方。 - 行尾的第一个反斜杠只是将长命令拆分为两行。您也可以轻松地省略它,将其全部写成一行长命令行
当然,你需要提供正确的值
- 目录
"$HOME"/some/videos
- 编码器工具及其参数
av_encoder_too --remove-audio ...
完成这项工作后,作为学习的下一步,我建议探索该xargs
命令——这是解决“对许多文件执行某项操作”问题的不同方法。
快乐黑客,
./ddd