複数のファイルに対して動作するコマンドを複数のファイルに出力するには?

複数のファイルに対して動作するコマンドを複数のファイルに出力するには?

私はobjdumpコマンドを使用して現在のディレクトリに.o拡張子を持つすべてのファイルを分解し、このコマンドの各.oファイル出力を同じベース名を持つ.txtファイルに保存してみました。

たとえば、私のディレクトリに次の3つのファイルがあるとします。

myfirstfile.o someotherfile.o finalfile.o

objdump私の目標は、3つの新しい追加ファイル(各ファイルには対応する元の.oファイルのコマンド出力が含まれている)を作成することです。

myfirstfile.txt someotherfile.txt finalfile.txt

私が試したことは次のとおりです。ただし、「あいまいなリダイレクト」とのみ表示されます。

objdump -d --no-show-raw-insn *.o > *.txt

答え1

各ファイルに対してコマンドを実行する必要があるため、ループを使用するのが最善です。

シェルを含むzsh:

for f (./*.o) objdump -d --no-show-raw-insn $f > $f:r.txt

bashシェルまたは他のPOSIXシェル(含む)を使用するzsh

for f in ./*.o; do objdump -d --no-show-raw-insn "$f" > "${f%.o}.txt"; done

*.txtファイルが存在しない場合.o(にはありませんzsh)という名前の空のファイルが作成されます。

答え2

次のように実行されるmyobjdump.shというファイルを作成するには:

./myobjdump.sh `ls *.o`

スクリプトは次のとおりです。

#!/bin/bash

for ((i=1; i<=$#; i++)); do
  objdump -d --no-show-raw-insn $i > `basename $i .o`.txt
done

編集する

#!/bin/bash

for n in $@; do
  objdump -d --no-show-raw-insn $n > `basename $n .o`.txt
done

関連情報