catしきれない時はxargsを使う

booksディレクトリ下の*.txtを全て標準出力経由でrubyのプログラムに渡したい時

cat books/*.txt | nkf -u | ruby -Ku make_dict.rb > dict.txt

これでいいのだが、ファイルが多いと "argument list too long" と言われてしまう。


xargsとfindを使ったらできた。

find books | grep "\.txt$" | xargs cat | nkf -u | ruby -Ku make_dict.rb > dict.txt

xargs

xargsは引数に与えられたコマンドに、標準入力を改行区切りで渡す

find

lsだとファイル名がフルパスで出なかったので、findでディレクトリ名を指定した。