複数の入力ファイルを実行するプログラムを実行するシェルスクリプト

複数の入力ファイルを実行するプログラムを実行するシェルスクリプト

私はシェルスクリプトに初めて触れて助けを探しています。

2つのパラメータ入力ファイル名と出力ファイル名を受け入れるプログラムがあります。

名前の異なるデータファイルが複数あります。各ファイルが個別に処理されるように、すべてのデータファイルでこのプログラムを実行するシェルスクリプトを作成したいと思います。

-s各出力ファイルの名前はソリューションファイルであることを示すために入力ファイルの名前でなければなりません。ただし、-s名前の基本部分を追加する必要があるので、にfile.txtなりますfile-s.txt

編集:同様の質問をしたすべての回答者に感謝します。ここ 違いは、私がMS VSを使用していないか、C ++コードに問題があり、すべてのデータ(何千もの.txtファイル)を私のワークステーションで同時に処理したいということです。

答え1

GNU Parallelプログラムを使用してこれを行うことができます。

find . -name \*.txt | grep -v -e '\-s.txt$' | parallel echo program "{}" {.}-s.txt
program ./1 2.txt ./1 2-s.txt
program ./aaa.txt ./aaa-s.txt
program ./bbb.txt ./bbb-s.txt
program ./demo.txt ./demo-s.txt
program ./original_names.txt ./original_names-s.txt

答え2

次のようなものが欲しいようです。

for src; do
  dst="${src%.txt}-s.txt"
  program "$src" "$dst"
done

処理するファイル名でスクリプトを呼び出します。重要な部分は拡張子を"${src%.txt}-s.txt"削除します。.txt-s.txt

答え3

現在、2つの引数を使用してプログラムを呼び出すと仮定すると、cmd input-file output-fileラッパースクリプトを次のように簡単に作成できます。

#!/bin/sh
for file; do 
    output="${file%.txt}"-s.txt
    cmd "$file" "$output" &
done

次に、複数の入力を引数として使用してスクリプトを呼び出します。この解決策は、入力ファイルがすべて.txtサフィックスを持っていると仮定します(実際にはそうではないと仮定しますが、そうでない場合は出力ファイル名が奇妙になります)。これにより、既存の出力ファイルが上書きされる可能性があることに注意してください。懸念がある場合は、以前の存在を確認するいくつかのロジックを追加してください。この問題を回避するには、ディレクトリを作成し、すべての出力ファイルを新しいディレクトリに配置する方が安全です。または、入力からファイル名を読み取るには(たとえば、呼び出しスクリプトを使用できます< my-file-full-of-input-files-one-per-line ./my-script)、次のように作成します。

#!/bin/sh
while read file; do
    output="${file%.txt}"-s.txt
    cmd "$file" "$output" &
done

関連情報