我现在有一个任务,要按顺序运行几千条命令。这些命令都采用 形式。只有数字(以$ /home/user/.lcmodel/bin/lcmodel < 2HzSNR100C2.5.txt
大胆的类型)在不同文件中有所不同。这些数字是由for
MatLab 中的循环生成的。
例如,前面的数字Hz
是2
和3
,后面的数字SNR
是100
和200
,后面的数字C
是2.5
,3
和3.5
。在这种情况下,我必须运行 12 个这样的命令。是的,我只需要将它们作为一行运行,详细代码已经存储在 txt 文件中。
我对 Linux 完全陌生,有人可以帮我编写一个文件或命令来顺序自动运行这数千条命令吗?
答案1
如果所有文件都在当前工作目录中(即没有文件嵌套在某些子目录中),则使用循环bash
for
(感谢 Incnis Mrsi 提供更紧密的通配符模式):
for f in ?HzSNR???C*.txt; do /home/user/.lcmodel/bin/lcmodel < "$f"; done
这种特定的通配符模式非常紧密;另外,使用通配符本身将导致当前工作目录中文件的有序列表在语句中展开for
,最终导致文件按其数字顺序进行处理;
如果不是所有文件都在当前工作目录中,请使用 find:
find . -type f -name '?HzSNR???C*.txt' -exec /home/user/.lcmodel/bin/lcmodel < {} \;
但是,一般来说,使用find
并不保证文件将按照其数字顺序进行处理;如果必须按照其数字顺序进行处理,请使用find
++ sort
:xargs
find . -type f -name '?HzSNR???C*.txt' | sort | xargs -I file /home/user/.lcmodel/bin/lcmodel < file