如何将作用于多个文件的命令输出到多个文件?

如何将作用于多个文件的命令输出到多个文件?

我尝试使用 objdump 命令反汇编当前目录中扩展名为 .o 的所有文件,然后将此命令的每个 .o 文件的输出放入具有相同基名的 .txt 文件中。

举个例子,假设我的目录中有这三个文件:

myfirstfile.o someotherfile.o finalfile.o

我的目标是最终得到三个新的附加文件(每个文件包含objdump相应原始 .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

使用bashshell 或任何其他 POSIX shell(包括zsh):

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

*.txt请注意,如果没有.o文件(除了 in 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

相关内容