Cha*_* So 4 command-line bash scripts matlab
我现在有一项任务要按顺序运行数千个命令。命令都是在形式。只有数字(粗体)因文件而异。这些数字是从MatLab 中的循环生成的。$ /home/user/.lcmodel/bin/lcmodel < 2HzSNR100C2.5.txtfor
例如,号码前Hz会2和3,后面的数字SNR会100和200,数字后C会2.5,3和3.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)