各行ごとにコマンドを実行するスクリプト

mzp2008-11-06

30分プログラム、その408。ファイルの各行ごとに特定のコマンドを実行するスクリプトを作ってみた。

例えば、

foo
bar
baz

みたいなテキストファイルがあった場合、

$ each-line rm -rf < dir.txt

とすると、全部消せる。(もっとも、この場合はxargsで十分だけど)

作った動機

昔、作ったグロブの展開をコマンド化して、コマンドライン引数を展開できるようにした。

$ glob-extend foo[0-2].txt
foo0.txt
foo1.txt
foo2.txt

でも、ファイルにURLリストを書いて、それを展開したいこともある。

http://example.com/doc-[0-2].txt
http://example.com/index-[0-1].txt

そんなとき、このスクリプトを使うとハッピーになれる。

$ each-line glob-extend < url.txt
http://example.com/doc-0.html
http://example.com/doc-1.html
http://example.com/doc-2.html
http://example.com/index-0.html
http://example.com/index-1.html

使い方

$ cat dir.txt
foo
bar
baz

$ each-line rm -rf < dir.txt
#  rm -rf foo
#  rm -rf bar
#  rm -rf baz
# を実行する

ソースコード

#! /usr/bin/perl
# -*- mode:perl; coding:utf-8 -*-
#
# each-line.pl -
#
# Copyright(C) 2008 by mzp
# Author: MIZUNO Hiroki / mzpppp at gmail dot com
# http://howdyworld.org
#
# Timestamp: 2008/11/06 21:12:27
#
# This program is free software; you can redistribute it and/or
# modify it under MIT Lincence.
#
use strict;
use warnings;

while(<STDIN>){
    chop;
    system @ARGV,$_;
}