顺序运行数千个命令

Cha*_* So 4 command-line bash scripts matlab

我现在有一项任务要按顺序运行数千个命令。命令都是在形式。只有数字(粗体)因文件而异。这些数字是从MatLab 中的循环生成的。$ /home/user/.lcmodel/bin/lcmodel < 2HzSNR100C2.5.txtfor

例如,号码前Hz23,后面的数字SNR100200,数字后C2.533.5。在这种情况下,我必须运行 12 个此类命令。是的,我只需要将它们作为单行运行,详细代码已经存储在 txt 文件中。

我对 Linux 完全陌生,有人可以帮我编写一个文件或命令来顺序自动运行这数千个命令吗?

kos*_*kos 12

如果所有文件都在当前工作目录中(即没有嵌套在某个子目录中),请使用bash for循环(感谢 Incnis Mrsi 提供更紧密的通配模式):

for f in ?HzSNR???C*.txt; do /home/user/.lcmodel/bin/lcmodel < "$f"; done
Run Code Online (Sandbox Code Playgroud)

这种特定的通配模式非常紧密;也使用 globbing 本身将导致当前工作目录中文件的有序列表在for语句中被扩展,最终导致按数字顺序处理文件;

如果不是所有文件都在当前工作目录中,请使用 find:

find . -type f -name '?HzSNR???C*.txt' -exec /home/user/.lcmodel/bin/lcmodel < {} \;
Run Code Online (Sandbox Code Playgroud)

然而find,一般使用并不能保证文件将按其数字顺序进行处理;如果他们的数字顺序处理它们是强制性的,使用find+ sort+ xargs

find . -type f -name '?HzSNR???C*.txt' | sort | xargs -I file /home/user/.lcmodel/bin/lcmodel < file
Run Code Online (Sandbox Code Playgroud)

  • `*` 是不安全的。只要有可能,就使用 `?` 表示正好 *一个* 字符,使用 `??` 表示正好两个,等等。 (2认同)