15 个版本
0.5.2 | 2024年5月12日 |
---|---|
0.5.1 | 2024年5月12日 |
0.4.5 | 2023年1月25日 |
0.4.3 | 2022年10月4日 |
0.2.3 | 2021年11月25日 |
#380 在 命令行工具
33KB
703 行
o-o
允许假设标准输入和输出的命令读取和写入命令行中指定的文件。
是什么?为什么?
你是否遇到过命令调用命令和重定向之间的干扰问题?
例如,以下命令行
ls *.txt | xargs -I {} head -n 3 {} > {}-head.out
不会为每个 *.txt
文件创建 *.out
文件,而是创建一个包含所有 head
命令执行输出的文件 {}-head.out
。
命令 o-o
就是来帮助的!
现在你可以这样运行
ls *.txt | xargs -I {} o-o - {}-head.out - head -3 {}
用法
o-o
参数是子进程的标准输入、标准输出和标准错误输出,后续参数是要启动子进程的命令行。
如果您指定 -
作为标准输入等文件的名称,则不会进行重定向。在文件名前加上 +
将以追加模式打开文件。
Run a sub-process and customize how it handles standard I/O.
Usage:
o-o [options] <stdin> <stdout> <stderr> [--] <commandline>...
o-o --help
o-o --version
Options:
<stdin> File served as the standard input. Use `-` for no redirection.
<stdout> File served as the standard output. Use `-` for no redirection, `=` for the same file as the standard input, and `.` for /dev/null.
<stderr> File served as the standard error. Use `-` for no redirection, `=` for the same file as the standard output, and `.` for /dev/null.
Prefix with `+` to append to the file (akin to the `>>` redirection in shell).
-e VAR=VALUE Set environment variables.
--pipe=STR, -p STR String for pipe to connect subprocesses (`|` in shell) [default: `I`].
--separator=STR, -s STR String for separator of command lines (`;` in shell) [default: `J`].
--tempdir-placeholder=STR, -t STR Placeholder string for temporary directory [default: `T`].
--force-overwrite, -F Overwrite the file even if subprocess fails (exit status != 0). Valid only when <stdout> is `=`.
--keep-going, -k Only effective when multiple command lines are chained with the separator. Even if one command line fails, subsequent command lines continue to be executed.
--working-directory=DIR, -d DIR Working directory.
--version, -V Version information.
--help, -h Shows this help message.
安装
使用 cargo 命令进行安装。
cargo install o-o
示例
1. 提取每个 PDF 文件的第 5 行
当您知道 PDF 的特定行将包含您所需的信息时,例如文章的标题。
ls *.pdf | rargs o-o - - - pdftotext '{0}' - I head -5 I tail -1
在这里,
2. 从 Excel 文件中提取 vba 源代码
对于每个 *.xlsm
文件,从中提取 vba 源代码,删除前 5 行,并将代码保存到具有相同名称但扩展名改为 .vba
的文件中。
ls *.xlsm | rargs -p '(.*)\.xlsm' o-o - '{1}'.vba - olevba -c '{0}' I sed -e 1,5d
例如,当存在一个名为 foo.xlsm
的文件时,上述代码执行以下命令行。
olevba -c foo.xlsm | sed -e 1,5d > foo.vba
在这里,
- olevba 是一个从 Excel 文件中提取 VBA 代码的命令。
3. 从视频文件转录音频
从视频文件 amovie.webm
中提取音频,保存到一个临时音频文件,然后从临时音频文件中提取文本。临时文件在临时目录中创建,并在处理完成后被删除。
o-o - - - ffmpeg -i amovie.webm T/tmp.wav J whisper T/tmp.wav --model=medium
上述命令行与以下命令行类似,只是创建了一个临时目录。
ffmpeg -i amovie.webm tmp.wav ; whisper tmp.wav --model=medium
在这里,
许可证
MIT/Apache-2.0
依赖项
~2–11MB
~134K SLoC