it-swarm-ja.tech

数千のコマンドを順番に実行する

数千のコマンドを連続して実行するタスクがあります。コマンドはすべて$ /home/user/.lcmodel/bin/lcmodel < 2HzSNR100C2.5.txtの形式です。数字(bold type)のみがファイルごとに異なります。数値は、MatLabのforループから生成されます。

たとえば、Hzの前の数字は2および3になり、SNRの後の数字は100および200になり、Cの後の数字は2.53および3.5になります。この場合、この種のコマンドを12個実行する必要があります。そして、はい、私はそれらを単一行として実行するだけでよく、詳細なコードはすでにtxtファイルに保存されています。

私はLinuxを初めて使用しますが、これらの数千のコマンドを連続して自動的に実行するためのファイルやコマンドの作成を手伝ってくれる人はいますか?

4
Charlie So

すべてのファイルが現在の作業ディレクトリにある場合(つまり、サブディレクトリにネストされているものがない場合)、bashforループを使用します(よりタイトなグロビングパターンについては、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
12
kos