1 名前:名無しさん@お腹いっぱい。 [2009/07/01(水) 09:42:48 ] シェルスクリプトの総合スレです。 スクリプトのお勉強・自慢・腕試しなどにどうぞ。 まずは注意点、リンク、地鎮祭など(>>1-6 くらい)をご覧ください。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。 src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/ heirloom.sourceforge.net/sh.html ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルスクリプトのことをシェルってゆーな ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも RubyやPerlの方が適した仕事には素直にそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 前スレ シェルスクリプト総合 その14 pc12.2ch.net/test/read.cgi/unix/1233179688/
658 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 18:23:44 ] >>655 要点だけ書くよ。 if [ "$file1" -nt "$file2" ]; then cp -pf "$file1" "$file2" fi
659 名前:655 [2009/11/28(土) 18:43:33 ] >>658 ありがとうございます。 ファイルが更新された場合、サイズや更新時間で比較するしかないと思われるのですが 更新時間や、ファイルの詳細?を変数に格納することは可能なのでしょうか?
660 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 18:47:33 ] >>659 md5sumとかでハッシュ値を見たら?
661 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 18:54:17 ] >>659 せっかく回答もらってるのに意味をちゃんと理解しろよ。 [ A -nt B ] ってやったら、これで更新時間を比較してるんだよ。 別に更新時間を変数に入れる必要なんかない。 -nt は、"newer than" ね。
662 名前:655 [2009/11/28(土) 19:16:35 ] >>658 >>661 そういうことですね!! ファイルの更新時間ではなく、ファイル自体を比較すればいいのですね!! 理解力が無く、ご迷惑おかけいたしました・・・ アドバイスを参考にスクリプトを作成してみたいと思います。 ありがとうございました。
663 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 19:19:11 ] >>662 違うよ。 ファイル自体なんて比較してない。 更新時間を比較してるの。 if [ fileA -nt fileB ]; then ... ってやると、fileA と fileBの更新時刻を比較して、 その結果で動作が決まるんだよ。 fileA/fileBの中身は読んでない。
664 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 19:23:46 ] hashinfo.com/
665 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 19:28:45 ] md5sumとかハッシュとか言ってる回答者の言うことはここでは無視しとけ。 単純にシェルスクリプトから [ ] (testコマンド)で時刻比較できるんだから。
666 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 19:33:06 ] >>662 は日本語読解力からしてダメだな。
667 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 19:36:34 ] 更新時刻が異なる場合、なのに、newer than だけでいいんだろうか
668 名前:655 [2009/11/28(土) 19:36:40 ] >>663 少し調べてみましたところ、ファイルのタイムスタンプ、つまり更新時間 を比較しているのですね。 ファイルの比較には -nt -ot の2種類があるようですが "="や"!="で比較することは無理と理解してよろしいのでしょうか?
669 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 19:42:39 ] >>667 だから>>658 は「要点だけ」って言ってるんだよ。 せっかく >>668 が -nt と -ot を調べたんだから、 それを -o すれば 時刻の "!=" を条件を記述できることに気づくはず。
670 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 21:50:23 ] >>668 > ファイルの比較には -nt -ot の2種類があるようですが >>663 を読み直せ…
671 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/28(土) 22:22:24 ] rsync 使え、で終わる気がする
672 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/11/29(日) 00:01:55 ] >>668 > "="や"!="で比較することは無理と理解してよろしいのでしょうか? そう考えていいよ。「異なる場合」って言ってるんだから、 「「新しい場合」または「古い場合」」 っていう条件が必要なんでしょ? それぞれ>>663 の書式を使って-ntと-otでできるよ。君の言うとおりだよ。 あとは二つをつなぐ「または」を調べてみてごらん。>>669 もそう言ってるけどね。 >>671 俺もそう思う。
673 名前:655 [2009/11/29(日) 00:32:15 ] >>672 if [ FILE1 -nt FILE2 -o FILE1 -ot FILE2 ] ; then cp -p -f … exit 0 else exit 1 fi とすればいいのですね! >>658 >>663 そこまで読み取ることができず、ご迷惑おかけいたしました。。
674 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/04(金) 21:09:44 ] $ echo "aaa.kp//////a/bbb//ccc///ddd///// " | sed -e 's@//*@/@g' -e 's@http:/@@g ' aaa.kp/a/bbb/ccc/ddd/ 一応目的の動作は達成しているのですが、sedがマヌケです。 もうちょっと素敵な方法はありますか?
675 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/04(金) 21:32:24 ] >>674 echo 'aaa.kp/a/bbb/ccc/ddd/ '
676 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/05(土) 00:35:32 ] sed -e 's@\([^:]\)//*@\1/@g'
677 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/05(土) 00:49:25 ] マジキチ
678 名前:名無しさん@お腹いっぱい。 [2009/12/05(土) 19:23:28 ] 複雑多数のサブディレクトリを持つディレクトリAを複製したい 但し、いくつかのサブディレクトリについては複製対象外としたい。 現状以下のようにやってます。 cp -rp A B rm -rf B/a/b/c rm -rf B/bb/aa/cc ・・・消したい対象分ひたすら羅列。 サブディレクトリ内のサイズが大きく、cp,rmで余計な時間が掛かってしまいます。 AをBとして複製する場合に、「このサブディレクトリ以外すべてコピー」 またいな記述方法はありますでしょうか? sh,bashでお願いします。
679 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/05(土) 19:40:24 ] cd A tar cf - . --exclude a/b/c --exclude bb/aa/cc | tar xf - -C /path/to/B
680 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/05(土) 19:49:17 ] >>679 なるほど、tarのアーカイブファイルを経由させるのですね。 ありがとう。やってみます。
681 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/05(土) 22:18:32 ] find . -print |egrep -f exlude-pattern-file |cpio -pumd destdir さらに、コピーでなくてハードリンクで済ませられるなら、高速、省スペース。 find . -print |egrep -f exlude-pattern-file |cpio -pumdl destdir
682 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/05(土) 23:09:18 ] ありがとう。一考してみます。
683 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/06(日) 23:26:04 ] >>676 規制で書けかなった。ありがとう。
684 名前:名無しさん@お腹いっぱい。 mailto:sega [2009/12/10(木) 10:18:03 ] findの判別式を単独のファイルに適用して、真偽値だけほしいんだけど どうしたらいい?
685 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/10(木) 10:27:52 ] 例えば [ -n "`find /path/to/file -mtime 7 ...`" ] みたいな感じか?
686 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/10(木) 10:34:08 ] いや、 find /path/to/file -mtime 7 2> /dev/null; echo $? だろ。
687 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/10(木) 10:39:11 ] ファイルが正常に処理されれば、判定結果にかかわらず戻り値はいつも0だよ
688 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/10(木) 10:42:01 ] >>686 マッチしてもしなくても$?は0なのよ >>685 なるほど文字列の長さを見るのか とりあえずこれでやってみるわ超サンクス
689 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/10(木) 19:44:25 ] 他サーバ上のtar.gzファイルを解凍する方法はないでしょうか?
690 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/10(木) 20:28:24 ] sshとか可能なら普通に解凍できるから、そうじゃない質問だとして、 エスパー募集だな
691 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/10(木) 20:55:52 ] >>690 たとえばftpで他サーバに接続して、gzip -cd | tar xvf - のようなことはできないでしょうか?
692 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/10(木) 20:59:06 ] >>691 wget ftp://user:pass@他サーバ/path/to/hoge.tar.gz -O - | tar zxvf -
693 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/10(木) 21:08:14 ] >>692 ありがとうございます。 ちょっと試してみます。
694 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/12(土) 13:37:48 ] v6shell.org/ にてるような、変わっているような。
695 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 13:17:58 ] すみません、スクリプト内で使用されている変数について教えてください。 使用しているOSはCentOS5.3です。 今、勉強がてら/etc/init.d/functionsを読んでいるのですが、 functions内で使用されている変数$LSBの意味がわかりません。 使用例 :[ "$BOOTUP" = "verbose" -a -z "${LSB:-}" ] のように記述されています。 例えば、上記例の$BOOTUPは、/etc/sysconfig/init内で定義されているのを確認できました。 しかし$LSBは/etc/sysconfigや、/etc内のファイルをざっと検索してみても大本の定義が発見できません。 setにもenvにもありません。 $LSBは、意味ありげに見えるだけで、単になんでもない、普通の変数なんでしょうか? それとも、ちゃんとどこかで定義されているんでしょうか? もしかしたら、変数ではなく別のものなんでしょうか? しょうもない質問で申し訳ありませんが、ご教授ください。よろしくお願いします。
696 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 14:00:20 ] 教授はあげません。
697 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 14:33:04 ] Linux Standard Base準拠なら定義しておく、ってやつかな?
698 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 15:05:57 ] 「ご教授」で正しいんだよ。
699 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 15:28:33 ] そして、それに対する>>696 の返しは絶妙だったな。
700 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 15:42:03 ] いや、正しくない。 「教授する」というのは体系だててきちんと教えるという意味なので、 どこの馬の骨かわからない匿名掲示板の単発質問者には「教授」しない。
701 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 15:53:37 ] >>700 だから「体系だててきちんと教え」てください、って >>695 が言ってるんだから 言葉として正しいじゃん。 それに対して、>>696 は「教授する」自体が間違いだと勘違いして 恥を晒しちゃったね。
702 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 16:04:02 ] 恥を晒してる奴がいると思うとすかさず飛びつく奴って流石だよな。 楽しい休日の午後のひとときって感じ。
703 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 17:18:06 ] >>701 メクラ? >>695 のどこに「体系だててきちんと教えてください」と書いてあるんだ? 揚げ足とったつもりが恥晒して惨め過ぎ。
704 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 17:51:05 ] >>695 定義してない可能性があるから:-なんやで!
705 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 18:08:34 ] >>703 「ご教授ください」=「体系だててきちんと教えてください」(同値) >>695 には「ご教授ください」と書いてある、 イコール >>695 は「体系だててきちんと教えてください」と言っている
706 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 18:46:44 ] けんかをやめて〜 ふたりをとめて〜 わたし〜の〜ために〜 あらそ〜わない〜で もう こ〜れ〜い〜じょ〜う〜♪
707 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 18:50:49 ] じゃあ体系だてて回答してやれ
708 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 19:44:15 ] 695です。皆さまなんだかお騒がせしてすみませんでした。 >>697 >>704 ありがとうございます、Linux Standard Baseですか。規格だとしか捉えていなかったので、 関係あるとは想像もしていませんでした。 $BOOTUP=verboseだとold-style bootupらしいので、 加えてLinux Standard Base準拠でないことを確認したいとかなんでしょうかね。 Linux Standard Baseのページには、 「個々のライブラリのインターフェースの装備、および、、各インターフェースに関連したデータ構造・定数を規定しています」 とあったので、どこかで何か定義されているんでしょうね。以下のページを見つけたのですが探しきれませんでした。 dev.linux-foundation.org/betaspecs/booksets/LSB-Core-generic/LSB-Core-generic.html 実体がわからないのは残念ですが、私自身が納得できたので、先に進むことができそうです。 皆さま、本当にありがとうございました!
709 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 21:01:27 ] ${LSB:-} :- ってどういう意味?だれか教えて。 #一瞬 :-) かと思ったけど違ったので :-p
710 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 21:03:54 ] ・・・と書いておいてなんだけど、man bashに書いてあった ${parameter:-word} デフォルトの値を使います。 parameter が設定されていないか空文 字 列であれば、 word を展開したものに置換されます。そうでなければ、 parameter の値に置換されます。 へー。しらなかった。
711 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 21:06:40 ] :-)
712 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 23:43:43 ] >>705 バカメ。「ご教授ください」と「体系だててきちんと教えてください」は同値だが、 >>695 は誤用だから同値じゃ無いという指摘だ。 論理的思考の出来ないバカは恥を晒すだけだから引っ込んでろ。
713 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/20(日) 23:58:55 ] 日曜日最後のレスがそれじゃあな…
714 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 00:50:09 ] ご教示ください とすればおkだったような予感w
715 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 02:38:22 ] >>714 ご教授くださいだろ、バーカ! こんな展開だと予想
716 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 07:41:23 ] >>712 そうじゃなくて、 あくまで誤用であって、「ご教授する」という言葉は日本語として正しい、 というのが主張。 (誤用だけど、言葉自体は正しいの) ところが、>>696 曰く、 >教授はあげません。 ↑ という突っ込みは、「ご教授する」という言葉自体も間違っていると 思い込んでいる。 もし、「誤用」に対する突っ込みなら、 「(こんな掲示版では)ご教授はできません」 となるはずで、 「教授はあげません」みたいには言わないはず。 よって、 >>696 は、「ご教授する」という言葉自体を知らなかったという天で 恥を晒したんだよ。
717 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 11:12:52 ] なにそれこわい
718 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 13:14:13 ] うわ、まだ続けてるのかよ
719 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 18:25:12 ] >>716 アホ丸出しの言い訳止めろ。>>695 の用法も正しいと言うのがお前の主張(>>705 )。 >>696 はオレじゃないが、誤用に対して「あげない」とからかっている。 お前は用法を知らずに揚げ足とったつもりで恥を晒したうえに、小学生並みの見苦 しい言い逃れを続けている単なるバカ。お前の負け。 >>705 > 「ご教授ください」=「体系だててきちんと教えてください」(同値) > >>695 には「ご教授ください」と書いてある、 > イコール > >>695 は「体系だててきちんと教えてください」と言っている
720 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 19:46:10 ] 関係ない話はくだらないからやめようぜ。 >>695 の質問の本質はLSBはどんな意味をもつ変数なの?ってことだろ LSBについてまともに答えてるの>>697 くらいじゃねーか
721 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 20:31:51 ] レスありがとうございます と書くだけでスレが荒れるのと同じだな
722 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 21:02:19 ] >>721 FreeBSDって何???
723 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/21(月) 22:46:41 ] >>722 www.freebsd.org/ 荒したいならスペースが足らぬわ
724 名前:名無しさん@お腹いっぱい。 [2009/12/23(水) 17:35:56 ] cshについて質問させてください 変数の中身が文字列か数字か判断して処理をしたいのですがどうやったらわかりますか? if ($1 == [0-9]*) こんな感じでいけるのかなっておもったけどうまくいかずで…
725 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 17:40:30 ] 回答が欲しいなら「ご教授ください」って書かないと誰も答えないよ。
726 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 19:16:51 ] パイプラインについて質問です. % ls foo.txt bar.txt baz.txt の状態で, % ls | wc -l とやると3が返ってきます. これは,パイプラインを通すとlsの結果に改行が挿入されるということなのでしょうか? % ls | xargs echo | wc -l とすると1が返ってくるので,この結果の違いが不思議です.
727 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 19:24:28 ] まずは ls | cat して確かめてみなさい 一応、はまりそうなので正解を言っておくと、ls が、出力先がパイプか端末かを 調べて、出力を変えています。パイプが変えてるのではありません。
728 名前:名無しさん@お腹いっぱい。 [2009/12/23(水) 19:26:27 ] 724です。 是非ともご教授いただきたいです。 よろしくお願いいたします。
729 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 20:19:56 ] >>724 先頭が数字かどうかなら if ( $1 =~ [0-9]* ) でいけるけど、より正確に数値かどうか判定するとなると cshでは難しいかもしれない 教授は付けないほうがいい
730 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 20:37:33 ] 「ご教授」で正しいんだよ。
731 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 20:38:39 ] >>727 lsが状況に応じて出力を変えてるとは思いませんでした. ありがとうございます.
732 名前:724 mailto:sage [2009/12/23(水) 20:42:48 ] >729さん cshでは難しいですか。。。 回答ありがとうございます。
733 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 20:46:57 ] >724 if ( { ( echo -n "$1" | grep '^[0-9][0-9]*$' > /dev/null ) } ) echo yes,yes,yes
734 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/23(水) 23:37:25 ] >>724 にかなり近いのですが、質問します。 kshで「変数の中身が半角英数14桁」であることを確認したいのですが、上手くいきません。 if [ `expr $hoge : [a-zA-Z0-9]+` -ne 14 ] ; then # 半角英数14桁以外 fi と書いてみたのですが、+が正規表現になってくれず。 [a-zA-Z0-9][a-zA-Z0-9]*も最初2桁分しかチェックできず。 上手く正規表現でチェックできる術はないでしょうか? お分かりの方、ご教授お願いします。
735 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/24(木) 01:15:38 ] $ echo "foo" | if egrep -qs '^[a-zA-Z0-9]+$'; then echo yes; fi yes $ echo "_foo" | if egrep -qs '^[a-zA-Z0-9]+$'; then echo yes; fi $
736 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/24(木) 04:12:15 ] >>734 if [ `expr $hoge : "[a-zA-Z0-9]\+"` -ne 14 ]
737 名前:734 mailto:sage [2009/12/25(金) 07:48:46 ] >>735 >>736 アドバイスありがとうございます。 見た目に単純な736の記述を試して上手く動作したので、この形で実装したいと思います。 \でエスケープすると正規表現になるとは知りませんでした。完全に逆だと思ってました。 エスケープもダブルクオートも試したのですが、両方やるとは思いつかず… ありがとうございました。
738 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 18:19:46 ] えーと、複数ファイルを結合したいのですが、 ・ファイル名の一部が一致している ・結合すべきファイルの数は分かっている ・一致している部分の文字数、箇所も分かっている ・このようなファイルの組がディレクトリ内に複数組ある というような条件で、例えば file01abc.txt file02abc.txt file03abc.txt file01def.txt file02def.txt file03def.txt file...... で、わざわざ cat file??abc.txt > fileabc.txt cat file??def.txt > fileabc.txt cat............ などと書かずに一致部分を判別して全ての組を結合させたいのです。うまく出来る方法はあるでしょうか?
739 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 18:35:08 ] >>738 普通に、 for f in abc def do cat file??"$f".txt > file"$f".txt done
740 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 19:13:07 ] すみません、ちょっと説明足りませんでした。 そのabc、defってのが異なる組がかなり大量にあって、かつその文字列が そこそこ長いこと、毎回その生成される文字列が異なることから、いちいちinの後の部分を 書き出さずに出来るようにしたいのです。つまりこの場合、7,8,9文字目が (具体的な文字列は何だか分からないけれど)一致しているファイル全てを結合する、 というような指定は出来ないでしょうか?
741 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 19:19:01 ] >>738 普通に、 for ff in * do f=${ff:6:3} cat file??"$f".txt > file"$f".txt done
742 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 19:35:08 ] >>740 これで合ってる? ls | sed -n 's/^......//p' | sed 's/....$//' | sort | uniq | while read i do cat file*${i}.txt > file${i}.txt done
743 名前:名無しさん@お腹いっぱい。 [2009/12/26(土) 19:36:00 ] 10 22 3 11 25 90 12 ・ ・ ・ ってあるTextで平均から飛び出る奴(今回は90)切りたいんだけど ヒントないっすか?
744 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 19:38:28 ] 偏差値求めて標準偏差の何倍とかで検出だな
745 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 20:34:25 ] >>741 >>742 ありがとうございます。どっちも動作は完璧です。 さらにお手数をおかけしますが後学のために、 軽く何をやってるのか教えてもらえないでしょうか。 741はワイルドカードの挙動がよく分からないので3行目の時点で ffに何が入っているのかよくわかりません。ffの6バイト目から3文字分を fに代入し直しているって理解は合っていますか? 742は-n以降何をやってるか全く分かりません… 特に並んでいるドットの意味を教えてもらえないでしょうか? 察するに文字数ですよね?
746 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 20:50:17 ] >>745 >ffに何が入っているのかよくわかりません。ffの6バイト目から3文字分を >fに代入し直しているって理解は合っていますか? あってる >742は-n以降何をやってるか全く分かりません… >特に並んでいるドットの意味を教えてもらえないでしょうか? sedの正規表現です
747 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 21:01:15 ] >>745 's/^......//p' s は sbustitution == 文字の置換。s/aaa/bbb/ で aaa を bbb に置き換える。 ^...... は正規表現。^ は行頭を表していて、. は文字一つ分を表している。 p は print == 印字。s で置き換えた後の文字列を表示する。 sed 's/....$//' さっきと基本は同じ。 $ は行末を表している。....$ は行末の任意の4文字にマッチする正規表現。 sort | uniq 入力をソートして重複を除去する。 ここまでの処理結果は abc, def 等がファイル数分重複しているので、 重複を取り除く。 while read i; do ... read で一行ずつ読み込んで、変数 i に格納する。i には abc や def 等が入る。 シェルスクリプトは普段それほど使っていないので、多分、もっと良い 方法があると思います。
748 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 21:09:21 ] スマソ。 s/sbustitution/substitution/
749 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/26(土) 21:15:50 ] >>746 >>747 度々御丁寧にありがとうございます。よく分かりました。
750 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/27(日) 15:16:39 ] >>744 そか、いったん合計して偏差値出すしかないか d
751 名前:正月前 mailto:zzhong33@yahoo.co.jp [2009/12/29(火) 21:51:50 ] シェルスクリプトの中で以下のようにperlで重複部分の文字を削除する場合は、最後の文字は消されない理由はなんでしょうか? perlの中で同じことをすると、最後の文字は消されるのに。 教えて頂ければ、ありがたいです。 -------------------------- hoge='a:b:c:d:a:b:c:d:a' echo $hoge echo " " echo $hoge | perl -F: -ane 'chop;foreach(@F){$s{$_}++ or push(@b,$_)}print join(":",@b)' echo " " --------------------------
752 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/29(火) 22:24:22 ] >>751 echo -n
753 名前:正月前 mailto:zzhong33@yahoo.co.jp [2009/12/29(火) 22:45:31 ] ありがとうございました!!! perlの中でchopではだめで、echo -n で改行を消さないといけないんですね!
754 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/12/30(水) 00:24:04 ] auto-split後だからchopするとしたら chop($F[$#F]);
755 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/07(木) 21:10:23 ] run.shファイルの中で、script_file.shをsourceした場合。 sourceされているscript_fileの中でscript_file自身の絶対パスを得る方法を調べています。 bashの場合はscript_fileの中で$BASH_SOURCEから得られるが、他のシェル(zsh/tcsh/ksh)でscript_file.shのパスを得られる方法を 教えていただけませんか? >>>>>>>>>>>>>>>>>>>>>> script_file.shファイルのある場所 /path/to/script_file.sh >>>>>>>>>>>>>>>>>>>>>> 実行例: %./run.sh 期待結果: /path/to/ ファイル <run.sh>の中身 ------------- #!/bin/(sh/zsh/tcsh...) source $path/script_file.sh ------------- ファイル script_file: ------------- script_file_path=`******` echo $script_file_path; -------------
756 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/07(木) 21:31:48 ] >>755 他のシェルのソースを改造して $BASH_SOURCEの機能を実装すれば桶。
757 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/07(木) 21:50:29 ] >>756 早速のレスありがとうございます。今環境がないので明日試してみます。
758 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/07(木) 22:13:18 ] こりゃ、わかって無いな。
759 名前:名無しさん@お腹いっぱい。 [2010/01/08(金) 13:35:29 ] 制限時間を設定して、2つのプロセスを実行して、時間内に1つでもプロセスが終了しなかったら2つともキルして、もう一度最初から実行するにはどのように記述すれば良いのでしょうか? ご教授ねがいます
760 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 14:04:43 ] どこの馬の骨かわからん奴に教授はしない。
761 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 14:41:28 ] >>759 同条件で、最初から再実行したら、また時間内に プロセスが終了しないのでループしちゃうのでは?
762 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 14:52:01 ] >>716 ループしてもいいから、まずはやり方を教授しろよ
763 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 14:57:34 ] >>761 ネットとか、I/Oポートとか、外的要因が絡んでるのなら 同条件で、最初から再実行してもループしない。
764 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 15:00:24 ] >>762 だから、誤用だけど言葉として正しい と言ってるだろバカ
765 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 18:36:31 ] >>764 誤用する奴には教えないと言っているのだ。バカ。
766 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 18:43:35 ] うるせー馬鹿
767 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 18:53:46 ] いい加減ウザイよ。
768 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 19:02:39 ] >>765 仮に誤用してなかったとしても肝心の質問の答を知らないくせに
769 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 19:22:50 ] 煽って答えがもらえるのは小学生まで
770 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 19:24:23 ] >>768 惨めだなあ。馬鹿丸出しの言い逃れを↓で完璧にのされたのを忘れてまた出てきやがった。 From: [719] 名無しさん@お腹いっぱい。 <sage> Date: 2009/12/21(月) 18:25:12 >>716 アホ丸出しの言い訳止めろ。>>695 の用法も正しいと言うのがお前の主張(>>705 )。 >>696 はオレじゃないが、誤用に対して「あげない」とからかっている。 お前は用法を知らずに揚げ足とったつもりで恥を晒したうえに、小学生並みの見苦 しい言い逃れを続けている単なるバカ。お前の負け。 >>705 > 「ご教授ください」=「体系だててきちんと教えてください」(同値) > >>695 には「ご教授ください」と書いてある、 > イコール > >>695 は「体系だててきちんと教えてください」と言っている
771 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 21:13:41 ] >>759 #!/bin/sh program1 & p1=$! program2 & p2=$! sleep 60 kill -0 $p1; is_p1=$? kill -0 $p2; is_p2=$? if [ $is_p1 = 0 -o $is_p2 = 0 ] then kill -9 $p1 $p2 sh $0 fi
772 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 21:24:43 ] 1 SIGKILLは安易に使ってはいけない。 2 exec sh $0
773 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 21:57:52 ] シェルをexecし直すのは効率が悪い。while文で書ける。 #!/bin/sh while : do program1 & p1=$! program2 & p2=$! sleep 60 kill -0 $p1; is_p1=$? kill -0 $p2; is_p2=$? if [ $is_p1 = 0 -o $is_p2 = 0 ] then kill -9 $p1 $p2 continue fi break done
774 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 22:06:04 ] SIGTERM と SIGINT のどちらを使うべきか いまだによくわからないのはオレだけでいい
775 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 22:11:32 ] SIGKILLでおk
776 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 22:19:31 ] >>771 >>773 program1やprogram2が 60秒以内に正常終了した場合には、 sleep 60 せずにスクリプトもすぐ終了したいんですが、、
777 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 22:45:57 ] 「ご教授ねがいます」なんていう奴は、これだよ
778 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 22:56:17 ] ご教授ねがえります
779 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 23:06:34 ] ご教授ねがえったか
780 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/08(金) 23:47:21 ] 謀反でござる! 謀反でござる!
781 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 05:41:48 ] 女教授おながいします
782 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 07:47:50 ] 質問 >>759 >>776 について、 「ご教授」の突っ込みと誤答ばかりで、 ==== ここまで正解ゼロ ====
783 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 11:58:33 ] 釣り板の釣りスレでマジ回答したら負け
784 名前:771 mailto:sage [2010/01/09(土) 14:46:50 ] >>776 sleep 60の代わりに、それらのプロセスが終了したか チェックすればいい t=0 while t=`expr $t + 1`; [ $t -lt 60 ] do kill -0 $p1; is_p1=$? kill -0 $p2; is_p2=$? if [ $is_p1 != 0 -a $is_p2 != 0 ] then break fi sleep 1 done
785 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 15:03:34 ] お題を良く読みましょう。「制限時間」 オレはご教授しないけどな。
786 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 15:06:52 ] >>784 それ、1秒間隔でポーリングしてるだけなので、 やっぱり最大1秒遅れるので、ダメです。
787 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 19:46:58 ] #!/bin/sh T1=`date "+%s"` T2=0 T3=0 STS=1 while t=`expr $T3 - $T1`; [ $t -lt 最大制限時間 ] do program1 & p1=$! program2 & p2=$! T2=`date "+%s"` T3=0 while t=`expr $T3 - $T2`; [ $t -lt 制限時間 ] do kill -0 $p1; is_p1=$? kill -0 $p2; is_p2=$? if [ $is_p1 != 0 -a $is_p2 != 0 ]; then STS=0 break 2 fi T3=`date "+%s"` done kill -9 $p1 $p2 done exit $STS もっとスマートに書けると思う ご教授しる
788 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 19:47:22 ] いやです
789 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 20:33:37 ] >>787 それ、ビージーループになってて重いのでNGです
790 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 22:00:20 ] waitすればいいやん sleep 60 &して、これも含めた三つのpidをwait。 コードは書かないでおくが。
791 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 22:03:13 ] >>790 複数のプロセスをwaitすると、全部が終了するまで返って来ないという仕様なのでNG
792 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 22:34:21 ] ソケット通信でprogram1,2の終了を 管理プロセスに通知する仕組みにすれば 何とかなるかもしれないが、 シェルだけでは無理だね
793 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/09(土) 22:38:41 ] んなぁこたー無いが、ご教授はしない。
794 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/11(月) 01:17:26 ] 下の input.txt から output.txt を作るにはどうすればよいでしょうか? input.txt は1列のデータで、output.txt は、 input.txt の1列目から1行目を削除して2列目に並べたものです perl か何かに全部読み込んで・・・という方法しか思いつかないのですが ワンライナーでさくっとやる方法あったら教えてください ### input.txt 1 2 3 5 6 ### output.txt 1 2 2 3 3 5 5 6
795 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/11(月) 01:25:06 ] (read a; while read b; do echo $a $b; a=$b; done) <input.txt >output.txt
796 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/11(月) 01:53:40 ] >>795 ありがとうございます 目から鱗です
797 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/11(月) 12:54:30 ] >>794 横方向に連結する場合、 paste を使うのが基本 paste - - < input.txt
798 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/11(月) 12:59:32 ] あ、よく読んでなかった。こうか # tail -n +2 input.txt | paste input.txt - > output.txt
799 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/11(月) 13:27:17 ] >>798 なぜ #プロンプト…
800 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/11(月) 13:49:45 ] あ、いや、特に考え無しに・・。 $ が一般ユーザで、# が root だっけ
801 名前:759 mailto:sage [2010/01/11(月) 14:32:31 ] 放置してしまってすみません。 みなさんありがとうございます。 >>776 さんは自分ではありません、まったくレスしていないので逆に失礼ですが。
802 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/11(月) 19:14:45 ] >>800 古くはさらに、$と%をそれぞれBourne ShellとC Shellの一般ユーザー プロンプトとしたものだけれど、いまはそこまで厳密に使う人はいない かもなー。 zshは基本的には$系のはずなのにデフォルトが%なのはちょっと不思議。
803 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/11(月) 23:07:53 ] 以下の処理のリダイレクトについて教えていただけますでしょうか? もしくは、よくある処理のようなので解説しているサイトを教えていただけますでしょうか? commandの結果を取得しつつ、画面及びファイルに出力 status=`exec 3>&1; { command 2>&1 3>&-; echo $? 1>&3; } | tee command.log 1>&2 3>&-` echo $status @execにより3で1を指した後にcommand実行時に3を閉じてるのは何故でしょうか? 必要性がよくわからないです。 同時に1が閉じられることはないですよね? Aどういう経路でcommandの結果はstatusに格納されているのでしょうか? Btee実行時に行っているリダイレクトの意味はどのようなものでしょうか? 正直言って全体的によく分からないです。
804 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/11(月) 23:22:23 ] >>803 機種依存文字は書き換えました (1)commandが3に出力しないように念のため (2) echo $? が 3に出る。3には、あらかじめexec 3>&1 によって、 パイプではなく、コマンド置換(バッククォート)に通じる標準出力が 複製されている。よって、echoが 3に出せば 変数statusに入る。 (3)teeがcommandの出力をcommand.logに書くと同時に 同じものを 1に出そうとするが、1にそのまま出すと変数statusに入ってしまうので 2にリダイレクトして画面に表示されるようにしている。 3>&-は(1)と同じく念のため。 以上、ご教授しましたw
805 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/11(月) 23:49:50 ] >>804 ありがとうございました。 command時に3を閉じてるので、echo時に1>&3としても出力されないと勘違いしておりました。 それと(3)について、command時に2>&1としていますが、 これはtee時の2には引き継がれないのでしょうか? 引き継がれていると、1>&2とすると元に戻って1に出力して statusに上書きしてしまうように見えます。
806 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/12(火) 06:29:53 ] >>805 commandとechoは無関係。 exec 3>&1したものが、commandとechoに並列して引き継がれる。 command側では3は不要なので閉じてるだけ。 commandの2とteeの2は無関係。 commandの1はパイプにつながっているので、 commandの2もパイプに流すためにcommand 2>&1 してるだけ。 teeはそのパイプを0で受けとる。 teeの1や2はcommandとは無関係で、デフォルトのまま。 そこで tee 1>&2 で画面に出す。 以上、俺もご教授しましたw
807 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/12(火) 09:40:26 ] >>806 ありがとうございました。 全て理解できました。
808 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/12(火) 18:20:04 ] つまり要約すると「ご教授」で正しかったのですね。 全て理解できました。
809 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/12(火) 18:37:12 ] つまり要約すると「ご教授」で正しかったのですね。 全て理解できました。
810 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/12(火) 19:15:58 ] 大事なことなので二度言いましたよ
811 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/12(火) 19:41:07 ] >>803 ではありませんが・・・ パイプがあっても1 2ともにデフォルト (パイプの左側で1 2が書き換えられていても、右側ではデフォルトに戻る) ただし新しいfdが作られていると、その先も残ったまま。 (パイプの左側で3が作られていると、右側でも3が作られている状態) パイプの左側では標準出力がパイプに渡される パイプの右側ではパイプから標準入力を受け取る コマンド置換は、最初のパイプの前までの標準出力を受け取る これで理解できてますか?
812 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/12(火) 20:32:25 ] >>811 違うね。 >(パイプの左側で1 2が書き換えられていても、右側ではデフォルトに戻る) ↑ 「右側ではデフォルトに戻る」のではなく、 そもそも最初からデフォルトのまま変化しない。 >ただし新しいfdが作られていると、その先も残ったまま。 ↑ パイプの左側で新しいfdが作られても、その先には無関係(残らない)。 >>803 では、あらかじめ execでfdを作っているから、 それを全体が受け継いでいるだけ。これと混同してはいけない。 >コマンド置換は、最初のパイプの前までの標準出力を受け取る ↑ 「最初のパイプの前」じゃなく、パイプラインの最後のコマンドの標準出力を受け取る で、お約束の「ご教授しました」
813 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/12(火) 21:37:11 ] 誤教授しましたと言うべき。
814 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/12(火) 22:00:01 ] >>812 thx おおよそ理解しましたが、 2個目と3個目のレスが気になります。 > パイプの左側で新しいfdが作られても 新しいfdを作るにはexecしかないと思っていたのですが、これ以外で作れるのですか? ・・@ それとも、シェルから呼び出されたコマンドの中で作られたfdでは > 無関係(残らない) だけど、execで作っているときは受け継ぐという意味ですか?・・・・・・・・・・・・・・・・・・・・・・・・・A それと > それを全体が受け継いでいるだけ。 というのはそのシェル内で n>&- するまで有効という意味でよいですか?・・・・・・・・・・・・・・B 更にサブシェルにも受け継がれますか?・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・C 3個目の方は > パイプラインの最後のコマンドの標準出力 とありますが、これはteeの標準出力ではないのですか?・・・・・・・・・・・・・・・・・・・・・・・・・・・・・D (でも1>&2しているので、どうなるんだろう。teeは標準出力がなくなるので、3に書き込んだechoということなのかしら) 質問ばかりですみません。
815 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/12(火) 22:02:31 ] C更にサブシェルにも受け継がれますか? forkするプログラム書いたことあるのを思い出しました。 たしか親からfd受け継いだはずなので、これは受け継がれますよね。
816 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/12(火) 22:23:58 ] >>814 だから、機種依存文字を使うなと、、 (1)exec以外でも勝手に新しいfdを使えるよ。 ただ、そのコマンド1つだけに有効になる。 (ここでいうコマンドには、サブシェルなどのコマンド群全体も含む) (2)execでは、シェル自体のfdが変わるので、以降のコマンドすべてに影響。 (ただし、サブシェル内でexecした時はそのサブシェル内のみ) (3)いいよ。あと、n>&-だけじゃなく、n>&mで別の値を複製しなおすと execの影響は無関係になる。 (4)サブシェルにも受け継がれる (5)teeの標準出力だよ。で、標準出力に出ないように 1>&2してる。 3に書き込んだechoもパイプライン全体の標準出力だからコマンド置換に取り込まれる。 teeで1>&2するのと、echoとは無関係。
817 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/13(水) 18:38:41 ] 丁寧なご説明ありがとうございます!
818 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/13(水) 23:59:12 ] しかしほんとに「機種」依存文字なのか? 乗っかってるソフトウェア依存文字じゃないのか? とりあえず俺は読めるし、歴史的に俺の使っている機種が Cを表示できるはずは無いのだけれど、表示出来ているわけよ。 (どのようにタイプしたらその字が出せるか解らんが、とりあえずコピペは出来る) FreeBSD で LANG eucJP なのだが、2ちゃんねるビューワだとCが読めるし コピペで転記できるよ。(書き方は不明) ほんとに機種に依存するの?
819 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/14(木) 00:04:36 ] ググレカス
820 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/14(木) 00:38:24 ] 丸数字やローマ数字を機種依存文字と呼ぶのは おかんが家庭用ゲーム機ならPS3も360もファミコンと呼ぶのと同じで 言葉にこだわる必要はありません
821 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/14(木) 00:52:50 ] 丸数字が機種依存とか言われたのは歴史的経緯だわな 今や機種依存どころかUnicodeというれっきとした国際標準に含まれてる 2chで今更丸数字使うなっても化石じみてて何だかな
822 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/14(木) 00:55:09 ] 2chが化石Shift_JIS使ってるかぎり言われつづける
823 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/14(木) 03:41:02 ] 2chはcp932だろ
824 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/14(木) 04:14:23 ] 時代は UTF-8 ですよ
825 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/14(木) 04:16:28 ] いまどきの機種依存文字といえば「〜」かな
826 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/14(木) 08:28:32 ] >>825 誰もがWindows-31JとShift_JISの区別を付けるようになれば 片が付くのにね……
827 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/14(木) 09:05:59 ] うちのMacちゃんでは2chのカキコのローマ数字が化けるざんす。
828 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/14(木) 09:44:45 ] この板の住人ならOSは関係ないってことくらい分かるだろ MacJapaneseの代わりにWindows-31Jで処理するようなライブラリ使って FirefoxでもChromiumでも何でもビルドすればいいだけ
829 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/14(木) 21:53:24 ] 半角カナは使ってもいいと思う
830 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/14(木) 23:02:10 ] >>828 じゃあsafariをビルドする方法を教えてください。
831 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/14(木) 23:41:43 ] フィルタリングプロキシを立てて Windows_31JくさいShift_JISなページをUTF-8に変換してやるのが楽じゃないかな
832 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/15(金) 00:12:46 ] それはクライアント側でフォントいじれよっていうのと等価では?
833 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/15(金) 00:29:34 ] 丸数字使うな。カス。と言う方が楽だしecoだな。
834 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/15(金) 01:08:33 ] エコロジストならスレ違いネタでスレを消費しないでくれ
835 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/16(土) 01:23:40 ] bashでif〜とする時、[ と [[ ができますが [ は 外部のtestコマンドで、[[が内部コマンドなんですよね? [ ではなく [[ を使った方が 速度が速いのでしょうか?
836 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/16(土) 01:50:26 ] bash の [ と test は builtin。[[ は compound command。 [[、[、外部コマンドの test の順に速い。 外部コマンドを呼んだ場合がダントツで遅くて、他の50倍ぐらい遅い。[[ と [ は大して変わらん。
837 名前:835 mailto:sage [2010/01/16(土) 02:16:10 ] お答えありがとう。
838 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/16(土) 12:01:06 ] >>834 富豪プログラマのスレです。
839 名前:名無しさん@お腹いっぱい。 [2010/01/26(火) 12:21:42 ] ●やりたいこと カレントディレクトリ以下の全ファイル(レギュラーファイル,かなり大量,何百万単位)を 検索し,ファイル名,ファイルサイズ,MD5ハッシュ値を出力したい。 1ファイルにつき1行。 ※効率よくやりたいのでファイルの数ごとにstatやmd5プロセスを起動する,という ことは避けたい。 ●やったこと ファイルサイズだけ,とかMD5だけなら下記の方法で満足な早さで出力が得られます。 環境はMac OS Xです。 find . -type f | xargs stat -f '%N,%z' > outputfile.txt find . -type f | xargs md5 $1 | sed -E 's/^MD5 \((.*)\) = (.*)/\1,\2/' > outputfile.txt 上の二つを合わせたようなことをしたいのですが,うまい方法を教えて下さい。
840 名前:名無しさん@お腹いっぱい。 [2010/01/26(火) 12:24:01 ] 補足 各行が ファイル名,ファイルサイズ,MD5ハッシュ値 という出力にしたいです。
841 名前:名無しさん@お腹いっぱい。 [2010/01/26(火) 12:27:06 ] コピペミスです。>>839 の2つ目のfindは正しくは find . -type f | xargs md5 | sed -E 's/^MD5 \((.*)\) = (.*)/\1,\2/' > outputfile.txt でした。
842 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 12:49:51 ] perlかpythonかrubyで書きなよ。
843 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 12:52:31 ] ●解答 joinすればいいだけ。 ●補足 箇条書での質問は失礼
844 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 13:01:19 ] ●傍観者の感想 ワロタ
845 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 13:31:04 ] pasteというコマンドがあってだな。
846 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 14:55:29 ] sed が起動するのは気にならないのかw
847 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 15:05:51 ] >>846 そりゃ、sedは1回しか起動しないし
848 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 16:46:34 ] 次スレのテンプレに↓入れとけよ ●解答 perlかpythonかrubyで書きなよ。
849 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 16:50:45 ] >>848 >>1 ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも RubyやPerlの方が適した仕事には素直にそちらを使いましょう。 Pythonも入れればよいわけだな。
850 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 16:52:39 ] で、今回の質問の場合 perlもpythonもruby関係なくて、 joinかpasteで済む問題だったわけだが、、
851 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 17:03:54 ] join, pasteは中間ファイルを作るわけだが、数百万ファイルになるとかなりのオーバーヘッドになる。 実行時間はファイルIOが支配的なのでインタプリタが消費するCPUは隠される。 従ってLLでの実装を勧めたわけだが、初心者にはわからないらしい。覚えておく事だ。
852 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 17:35:37 ] >>851 中間ファイルを作らずにnamed pipeでやる方法を知らない初心者らしい、、
853 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 18:31:25 ] この件では I/O にかかる時間でいちばん支配的なのは find, md5, stat,(+ join を使う場合は sort)であって、 中間ファイルを使うことによるオーバーヘッドなんぞ誤差にしかならんよ。
854 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 18:34:04 ] 中間ファイルって、MS-DOSじゃないんだから・・・
855 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 18:40:42 ] find × 2 → named pipe → paste で、中間ファイルなしでメデタシメデタシ
856 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 19:28:25 ] 一部のシェルの diff <(command) <(command2) みたいなのは中間ファイル作るのかしらん?
857 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 19:30:24 ] >>856 だから、それが named pipeなんだよw
858 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 19:31:07 ] mknod で作らなくてもいいのかー
859 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 22:34:39 ] findは全てのファイルにstatかけるのを知らない初心者? w
860 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 22:37:15 ] っつーか >>839 と >>842 をそれぞれ時間計測して比べりゃすむ話だろ 漏れは後者の勝ちだと思う
861 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 22:38:26 ] >>854-855 パイプのIOは発生するだろ。バカ。
862 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/26(火) 22:38:31 ] 漏れww
863 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 00:35:27 ] 2ch初心者発見。 漏れ、とかで煽られても、、、 半年ROMってれば。
864 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 00:52:28 ] 2ch上級者(;´Д`)
865 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 01:11:09 ] 今時漏れなんて使わねぇよw
866 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 06:54:47 ] >>839 自身、find×2 を個別に実行した状態で 「満足な早さで出力が得られます」 と言っているのだから、それがすべて。 問題はそこじゃなくて、2つの出力を効率良くまとめる方法が質問点。 で、そのベストアンサーはpaste。
867 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 11:51:49 ] 自演乙
868 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 12:54:46 ] >>866 負け犬の何とか…
869 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 13:17:04 ] >>859 ここではstatは問題にならないんだよ、初心者クン >>860 >後者の勝ちだと思う 「思う」だけじゃ間違ったことでも言えてしまうねw >>861 パイプのI/Oでは物理I/Oは発生しないんだよ、初心者クン
870 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 13:26:19 ] >>869 前言撤回? w
871 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 13:28:37 ] >>870 良く良め。869 は 「named pipe+paste の方が速い」という主張を一貫してしてるぞ
872 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 13:40:18 ] (1)シェルスクリプトでの多少高度な質問がなされる ↓ (2)「それはPerlかPythonかRuby使った方が速い」と誰かが投稿 ↓ (3)別の人からシェルスクリプトでのマトモな回答が投稿される ↓ (4)質問者、傍観者とも納得 ↓ (5) (2)が発狂 ← 今ココ
873 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 13:50:58 ] >>871 アルツハイマー? >>853 > find, md5, stat,(+ join を使う場合は sort)であって、
874 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 13:53:01 ] >>869 は >>853 じゃないよ。
875 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 13:57:01 ] >>853 が言ってる statは、xargsから起動されるstatコマンドのことであって、 find内部のstatのことじゃないだろ。
876 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 14:22:00 ] LL: ディレクトリ読み込み 1回 stat(i-node読み込み) ファイル個数 MD5 ファイル個数 出力 paste: ディレクトリ読み込み 2回 stat(i-node読み込み) ファイル個数×3 MD5 ファイル個数 中間ファイル(パイプ)書き出し/読み込み 出力 ファイル数が多くてiノードのキャッシュは期待できない。 MD5はCでの実装もあるから、インタープリターのオーバー ヘッド見込んでも、おそらくLLの方が速いね。
877 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 14:26:16 ] >>876 はいはい、「おそらく」と書いとけば何でも言えるねw perl/python/ruby自体のオーバーヘッド(結構大きい)も良く考えて出直してね
878 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 14:31:44 ] マルチコアなCPU環境だと、 同じことやる場合でもパイプで複数のプロセスに分けた方がかえって速かったりする
879 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 14:48:09 ] 議論してる時間で問題を解決してしまった人の勝ち。
880 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 15:07:26 ] >>877 ぷぷっ。そのレスはそのまま返してやるよ。w
881 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 15:11:54 ] find ->(パイプ)-> md5 の場合、ファイル1個あたりにかかる時間はmd5の方がはるかに大きく、 find自体の動作はmd5の実行の裏プロセス(別CPU)で行なうから、 findの実行時間はすべてmd5の実行時間内に吸収されてしまって、 結局findの時間は無関係になる。 例: sleep 1 | sleep 10 ってやると、10秒で終了する。 左側のsleep 1は無関係になる。 もう1本のfindの、 find ->(パイプ)-> statコマンド の方は、find->md5の方よりはるかに速いから、 2つのfindを名前付きパイプでpasteに接続する場合、 実行速度は遅い方の上流パイプであるmd5だけによって決まる。 よって、stat云々は一切関係なくなり、 名前付きパイプ+pasteが高速で動作する。
882 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 15:18:31 ] LLが遅いと因縁つけてる奴は実測して証拠出せよ。w
883 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 15:34:47 ] >>860 が言うようにtimeで計測すれば済む話なのになぜ誰もやらないのか あ、俺はrubyとか知らないからパスね^^ 誰かfindとperl/python/rubyでベンチ取ってよ
884 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/27(水) 16:40:18 ] 適当に試してみたよ pastebin.com/f1130c0e8 $ time test.bash >/dev/null real 1m50.762s user 0m17.992s sys 0m4.473s $ time test.py >/dev/null real 1m49.994s user 0m19.045s sys 0m5.523s
885 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 01:38:29 ] >>884 そのPythonのソースだと、各ファイルに対してstat()が最大3回呼ばれるのかな
886 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 01:58:11 ] ま、どう考えてもMD5sum取る部分のI/O律速になるので stat()の回数減らしたところで誤差程度だろうけど
887 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 03:34:55 ] 1000倍以上違うだろうね
888 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 11:54:30 ] >>839 > find . -type f | xargs stat -f '%N,%z' > outputfile.txt > find . -type f | xargs md5 $1 | sed -E 's/^MD5 \((.*)\) = (.*)/\1,\2/' > outputfile.txt findは -print0でxrgsに渡し、xargsは -0で受け取るようにしましょう。 > find . -type f -print0 | xargs -0 stat -f '%N,%z' > outputfile.txt > find . -type f | xargs -0 md5 | sed -E 's/^MD5 \((.*)\) = (.*)/\1,\2/' > outputfile.txt www.otsune.com/diary/2007/03/29/1.html
889 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 17:51:27 ] こんなのfind + perl のワンライナーでいいじゃん > find . -type f -print | perl -l0ne 'use Digest::MD5 qw(md5_hex);$s=-s $_;print $_ ." $s " . md5_hex($_) ."\n"'
890 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 18:10:27 ] >>889 アフォか、ファイル名の md5 計算してどうする www
891 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 18:13:23 ] >>888 日記だからある意味しょうがないのだが。そういう古臭いページなんとかならないもんかね。
892 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 18:22:57 ] >>890 おー、いまperldocしたら calculate the MD5 digest of this "message" ってかいてあったwwはずかしいwwwしぬかも
893 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 19:05:07 ] >>891 どこがどう古臭いんだ?
894 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 19:22:17 ] 今書くなら「xargs捨てろ。 -exec {} +使え」
895 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 19:22:36 ] >>894 一緒じゃないの?
896 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 20:27:35 ] -exec だと正しく受け取れないファイルがある。 -print0 |xargs -0のほうが安全
897 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 21:09:21 ] へー知らんかった
898 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 21:11:42 ] >>896 原理的に有り得ないんだけど。
899 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 21:13:42 ] どっちだよ気になるだろ
900 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 21:37:46 ] -exec の + ターミネータ(;でなく)を知らないで答えていたりしてな。
901 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 21:52:49 ] それにしても「正しく受け取れない」は原理的にない。
902 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 22:08:06 ] いや、あるから -0 オプションが後から追加されたんですが。
903 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 22:08:48 ] って、xargs じゃなくて find の方か。ならないや。ごめん。
904 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 22:17:25 ] 結局>>896 は本当なのかどうなのか答えてくれ つまり実際に-exec +だと受けとれないファイルがあるのか それとも単に-exec ;と-exec +を混同してただけなのか それと>>894 の-exec +のほうが良いという根拠は何だ? -print0 | xargs -0じゃいかんのか? このままじゃ気になって寝れやしない
905 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 22:42:34 ] >>904 > それと>>894 の-exec +のほうが良いという根拠は何だ? exec +がある環境ならxargsはレガシーコマンド。webで解説する必要は無い。 そもそも、exec +が無い環境がレガシー。 xargsはジジイの胸の奥にしまっておいてくれ。
906 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 22:49:15 ] GNU findutilsにxargs付いてくるじゃない
907 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/28(木) 22:51:58 ] ジジイの懐古趣味
908 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/29(金) 01:55:18 ] xargs がいつobsolete になったの? なんか文書ある?
909 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/29(金) 12:12:24 ] -exec + のデメリット コマンドに渡すファイルの数を制御できない(xargs -n) 並列実行できない(xargs -P) -exec + のメリット find でひっかかったファイルが存在しなければコマンドが実行されない (GNU xargs は入力がゼロでもなぜか1回は実行する; xargs -r で抑制可) つーか、 ps ax | awk '/なんか条件/{print $1}' | xargs -r kill みたいに find とは無関係に使う場合も多いから、obsolete のはずがない。
910 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/29(金) 16:58:01 ] findの-execはひとつひとつ実行するから遅いだろ。 grep /dev/null というバッドノウハウもアレだけど。(-h使えって?)
911 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/29(金) 17:01:35 ] >>910 find -exec + の 「+」の意味を理解していない方は発言を御遠慮ください
912 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/30(土) 09:34:03 ] >>910 レガシーちゃんキター
913 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/30(土) 09:38:13 ] MacのTimeMachineのようなことをするスクリプトを教えて
914 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/30(土) 10:01:33 ] pdumpfs Rubyスクリプトだけどな。
915 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/30(土) 20:34:25 ] > -exec utility [argument ...] {} + > Same as -exec, except that ``{}'' is replaced with as many path- > names as possible for each invocation of utility. This behaviour > is similar to that of xargs(1). うおっ。-execに+なんて何時からあったんだ。
916 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/30(土) 20:41:41 ] ttp://www.gnu.org/software/findutils/manual/html_mono/find.html#Multiple-Files GNU findutils 4.2ぐらいからか
917 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/30(土) 21:09:21 ] -exec {} + テンプレに入ってるじゃねえかww
918 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/30(土) 22:00:29 ] ほんとだ。テンプレにあるな。 >findは -exec command {} + を推奨。 >他に -print0、xargsは -0オプションという方法もあるがSolaris非対応) まるで -exec + ならば solaris でも使えるように書いてあるが、 実際は使えなかったような記憶が…
919 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/31(日) 02:34:28 ] >>913 つ wikis.sun.com/display/OpenSolaris/ZFSTimeSlider
920 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/31(日) 20:50:42 ] >>918 docs.sun.com/app/docs/doc/819-1210/find-1?a=view
921 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/31(日) 21:09:07 ] >>920 そのマニュアル、肝心なところを誤訳してるね。 日本語訳マニュアルは信用してはいけない。
922 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/01/31(日) 21:19:36 ] sunでもあるんだな。日本誤訳マニュアル
923 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/01(月) 01:46:35 ] 原語は技術者が書いてても 翻訳は非技術者に丸投げだからね
924 名前:名無しさん@お腹いっぱい。 [2010/02/02(火) 23:57:42 ] このスレ参考にファイル数が膨大なディレクトリで paste -d, <(find $i -type f -exec stat -f '%N,%z' {} +) \ <(find $i -type f -exec md5 {} + | sed -E 's/^MD5 \(.*\) = (.*)/\1/') \ > output.txt やったら find: fts_read cannot allocate memory 出ました。Mac OSX なぜ? find のバグ?
925 名前:名無しさん@お腹いっぱい。 mailto:sage [2010/02/03(水) 00:03:47 ] libftsのバグじゃね?