各行ごとにコマンドを実行するスクリプト
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,$_; }