我的 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 \;
您可以使用 dirname
和 basename
的组合来为输出文件获得更好的命名,尽管在这种情况下,我更喜欢使用 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/