如何对给定目录中的每个文件运行命令?

如何对给定目录中的每个文件运行命令?

我正在使用mp4box它来移动 MP4 文件上的 MOOV 原子。

问题是,我将在给定的文件夹中拥有 6 个文件,并且我不想inter 500分别运行该命令六次。

是否可以mp4box -inter 500 *在目录中执行类似操作,让命令对该文件夹中的所有 mp4 文件运行?

答案1

您可以使用-exec选项find。此处,'{}'替换为每个 MP4 文件的文件名。这将处理所有类型的文件名,甚至包含空格或换行符的文件名。您需要提供-maxdepth 1以仅搜索当前目录。

find . -iname "*.mp4" -maxdepth 1 -exec mp4box -inter 500 '{}' \;

另一种更复杂的方法是将 的输出通过管道传输到find带有 的循环中read。这里,每个文件都由 字符分隔NUL,您需要告诉read根据此字符拆分输入,这是通过 实现的-d ''。您还需要引用变量"$file",以便保留名称中的空格或通配符。

find . -iname "*.mp4" -maxdepth 1 -print0 | while IFS= read -d '' -r file; do mp4box -inter 500 "$file"; done

相关内容