command-line - 使用一行 shell 命令多次运行程序

标签 command-line shell

我的 Linux 系统上有以下 gif:

$ find . -name *.gif
./gifs/02.gif17.gif
./gifs/fit_logo_en.gif
./gifs/halloween_eyes_63.gif
./gifs/importing-pcs.gif
./gifs/portal.gif
./gifs/Sunflower_as_gif_small.gif
./gifs/weird.gif
./gifs2/00p5dr69.gif
./gifs2/iss013e48788.gif
...and so on

我编写的是一个将 GIF 文件转换为 BMP 的程序,接口(interface)如下:

./gif2bmp -i 输入文件 -o 输出文件

我的问题是,是否可以使用 xargs、awk、find 等编写一行命令来为这些文件中的每个文件运行一次我的程序?或者我必须编写一个带循环的 shell 脚本吗?

最佳答案

对于此类工作,可能值得查看 find 手册页,尤其是 -exec 选项。

您可以按照以下方式编写一些内容:

find . -name *.gif -exec gif2bmp -i {} -o {}.bmp \;

您可以使用 dirnamebasename 的组合来为输出文件获得更好的命名,尽管在这种情况下,我更喜欢使用 shell for 循环,类似于:

for i in `find . -name "*.gif"`; do
  DIR=`dirname $i`
  NAME=`basename $i .gif`
  gif2bmp -i $i -o ${DIR}/${NAME}.bmp
done

关于command-line - 使用一行 shell 命令多次运行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754367/

相关文章:

windows - 列出cmd中的所有文件夹和子文件夹,但不包括文件

command-line - 如何在 IntelliJ IDEA 中输入命令行参数?

macos - 如何列出 OS X 中正在运行的程序的所有窗口标题?

ruby-on-rails - 在 MRI 和 jruby 之间切换的 Shell 脚本

linux - linux 命令的输出未从控制台中被抑制

Windows 命令行脚本根据用户定义的起始变量递减 FOR 循环中的变量

bash - 跨平台命令行脚本(例如 .bat 和 .sh)

linux - "tracing"版本的 readlink(1)

bash - 使用 bash 命令从文件中检索明文密码

linux - 在 csh 中重定向 stderr