17

最初に私の状況を説明させてください。私は Linux プラットフォームで作業しており.bmpfilename0022.bmp最大filename0680.bmp. 合計658枚。これらの各画像を.exeファイルを介して実行できるようにしたいと考えています。このファイルは画像を操作し、ファイルをユーザーが指定したファイルに追い出します。また、いくつかのしきい値引数があります:下限、上限。したがって、実行可能ファイルの典型的な呼び出しは次のとおりです。

./filter inputfile outputfile lower upper

端末から、またはある種の bash スクリプトを作成するだけで、すべてのファイルに対してこの呼び出しをループできる方法はありますか? 私の問題は次のようなものです。バッチ ファイルを使用して複数のファイルに対してコマンドを実行しますが、今回は Linux コマンド ライン ターミナルで作業しています。

4

6 に答える 6

15

あなたは、bash スクリプトを調べることに興味があるかもしれません。

シェルから直接 for ループでコマンドを実行できます。

具体的に言及した数値を生成する単純なループ。たとえば、シェルから:

user@machine $ for i in {22..680} ; do
> echo "filename${i}.bmp"
> done

filename22.bmpこれにより、 からまでのリストが表示されfilename680.bmpます。これは、あなたが言及した範囲の反復を処理するだけです。これは、ゼロ パディング番号をカバーしていません。これを行うには、 を使用できますprintfprintf構文はprintf format argument. $i前のループの変数を引数として使用し%Wd、W が幅である形式を適用できます。W プレースホルダーを前に付けると、使用する文字が指定されます。例:

user@machine $ for i in {22..680} ; do
> echo "filename$(printf '%04d' $i).bmp"
> done

上記$()では、変数として機能し、コマンドを実行して、事前定義された値とは反対の値を取得します。

これで、指定したファイル名が表示されます。それを実際のアプリケーションに適用できます。

user@machine $ for i in {22..680} ; do
> ./filter "filename$(printf '%04d' $i).bmp" lower upper
> done

これは 1 行に書き直すことができます。

user@machine $ for i in {22..680} ; do ./filter "filename$(printf '%04d' $i).bmp" lower upper ; done

質問から注意すべきことの1つは、.exeファイルは通常COFF、Linuxがフォーマットの実行可能ファイルを期待するフォーマットでコンパイルされますELF

于 2012-06-13T15:28:29.273 に答える
8

あなたはこのようなことを試すことができます...

#! /bin/bash
for ((a=022; a <= 658 ; a++))
do
   printf "./filter filename%04d.bmp outputfile lower upper" $a | "sh"
done
于 2012-06-12T22:43:29.363 に答える
2

xargs反復に活用できます:

ls | xargs -i ./filter {} {}_out lower upper

ノート:

  • {} は、パイプからの 1 行の出力に対応します。ここでは入力ファイル名です。
  • 出力ファイルは、接尾辞「_out」で命名されます。
于 2017-02-15T09:59:33.233 に答える
1

AS-ISシェルでそれをテストできます:

for i in *; do
    echo "$i" | tr '[:lower:]' '[:upper:]'
done

特別なパスがある場合は、*パス + glob で変更します。例:

for i in /home/me/*.exe; do ...

http://mywiki.wooledge.org/globを参照

于 2012-06-12T22:32:42.983 に答える
0

これは、次のような出力画像の名前を前に追加しますfiltered_filename0055.bmp

for i in *; do
    ./filter $i filtered_$i lower upper
done
于 2012-06-12T22:35:26.203 に答える