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/
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のバグじゃね?