1 名前:login:Penguin mailto:sage [2008/05/17(土) 13:44:57 ID:9hFWtCOD] UNIX板のスレを見ている方も多数おられるかと思いますが、 まあそれはそれとして、BASHウゼーとか言われる心配なく 平和にLINUX的スクリプト談義しましょうよ。 初めての自作スクリプト、自信ないから見てください。な初心者から トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで いろいろな人に参加して頂けると嬉しいです。 perlやらPythonやらの話が混ざっても良いんでない? Part3 : pc11.2ch.net/test/read.cgi/linux/1184077033/ Part2 : pc11.2ch.net/test/read.cgi/linux/1154578200/ Part1 : pc8.2ch.net/test/read.cgi/linux/1121994321/ >>2-5 あたりに色々と。
488 名前:login:Penguin mailto:sage [2008/09/25(木) 19:55:28 ID:oa1dgrD9] ( echo n; echo p; echo 1; echo w ) | fdisk /dev/sdb 入力が端末かどうかちゃんとチェックしてるようなモノだと動かないが、 fdisk はそんなことしてなかったはずなので、ふつーに標準入力からつっこめばよし。
489 名前:login:Penguin mailto:sage [2008/09/27(土) 00:45:11 ID:9WMmgXah] ゴミ箱スクリプト使ってるひといる?
490 名前:login:Penguin mailto:sage [2008/09/27(土) 01:12:09 ID:s/QKRkEt] あい。
491 名前:login:Penguin mailto:sage [2008/09/28(日) 03:42:58 ID:yjLf4XT+] ゴミ箱に入ってるファイルを復元させるやつなら使ってる
492 名前:login:Penguin mailto:sage [2008/09/29(月) 04:13:28 ID:nMbRNXLX] ティルダ(~)展開について質問。 #!/bin/bash ls ~/ directory="~/" ls $directory 上側のように直接書いたものは展開されますが、下側のように変数に入れたものは展開されません。 変数に入った「~」を展開するにはどうすればいいのでしょうか。
493 名前:login:Penguin mailto:sage [2008/09/29(月) 04:17:44 ID:dNtmh/2+] directory=~/
494 名前:492 mailto:sage [2008/09/29(月) 08:48:30 ID:dqlgrzbc] うわ、そんなことだったのか。ありがとうございます。 では、read directory; などでファイルから読んだ場合はどうすればいいんでしょう。
495 名前:492 mailto:sage [2008/09/29(月) 10:56:52 ID:dqlgrzbc] あ、わかりました。eval 使えばいいんですね。 ファイルからティルダ(チルダ)含んだパスを読み込むことなんかよくあると思うんだけど、 そういったシチュエーションでの展開は解説されてませんねえ。 基本的な展開の話ばかりで。
496 名前:login:Penguin mailto:sage [2008/09/29(月) 11:06:17 ID:6KBzfDQe] eval って書こうとしたら自己解決してたか。 >ファイルからティルダ(チルダ)含んだパスを読み込むこと 俺は経験無いけど、良くあることなの?
497 名前:login:Penguin mailto:sage [2008/09/29(月) 12:14:07 ID:PrjYZQYT] > 俺は経験無いけど、良くあることなの? んー、俺もそもそもスクリプトはあんまり書かないんだけど、 ちょっと今回必要があって、とあるファイルにつらつらと書かれたパスに対して 順番に処理かけていくスクリプトを組んだ。 よくあるかと思ったのは単なる想像。使ったスクリプトが悪かったかな?
498 名前:login:Penguin mailto:sage [2008/09/29(月) 12:15:02 ID:PrjYZQYT] アレ、ID 変わってる。 >>495 です。
499 名前:login:Penguin mailto:sage [2008/09/29(月) 13:09:37 ID:M1tw2hRO] むしろ勝手に解釈されたら困ることの方が多そう。
500 名前:login:Penguin mailto:sage [2008/09/29(月) 17:00:59 ID:DE65cKXI] $HOMEの方がいいと思う
501 名前:login:Penguin mailto:sage [2008/10/14(火) 23:13:02 ID:IUh0ZsYq] 16進数がずらーっと並んでいるテキストファイルを手で入力しています。 手入力なのでうっかり16進数の[0-9a-f]以外の文字がはいってしまうこと があるのですが、「このファイルには[0-9a-f]以外がはいってる」ということ を検出するいい方法はないでしょうか。
502 名前:login:Penguin mailto:sage [2008/10/14(火) 23:18:11 ID:peqExbxa] とりあえず grep -v '[0-9a-f]' みたいな
503 名前:login:Penguin [2008/10/14(火) 23:55:57 ID:VVRxoluk] >>501 なつかしい作業だね。 いまどき、そんな事やるひつようあるの?
504 名前:login:Penguin mailto:sage [2008/10/15(水) 01:23:45 ID:oM4m5G9h] >>502 試してから書けよ。 $ echo 00 | grep -v '[0-9a-f]' $ echo 0x | grep -v '[0-9a-f]'
505 名前:login:Penguin mailto:sage [2008/10/15(水) 01:26:34 ID:YCs9R2r/] grep '[^0-9a-f]' ですね、失礼しました
506 名前:login:Penguin mailto:sage [2008/10/15(水) 01:34:48 ID:IbpEXu/h] [ x"$hoge" = "x" ]というようなのをたまに見かけるんだけど [ "$hoge" = "" ]となにがちがうの?
507 名前:login:Penguin mailto:sage [2008/10/15(水) 01:46:00 ID:Z5rHmxLW] >>506 - で始まる文字列返されると困るから。
508 名前:login:Penguin mailto:sage [2008/10/15(水) 02:11:39 ID:IbpEXu/h] なるほど、どうも
509 名前:login:Penguin mailto:sage [2008/10/15(水) 21:42:29 ID:bOOa1s77] >>502-505 ありがとう。シンプルでそれでよかったんだね。なんか考えすぎてたらしい。 >>503 大昔のパソコン雑誌を押入れから発掘したんです。 そこにあったのは16進ダンプファイルで掲載されていたゲーム・・・。 そして、入力して動かそうとしてあーだこーだやっているうちに 「16進数テキストファイルの処理」が目的になってるという状態w
510 名前:login:Penguin mailto:sage [2008/10/16(木) 08:22:19 ID:tCBPvnpY] シェルの操作とかってそうやって覚えるもんだよねー 懐かしさに惹かれておいらも引っ張り出してみようかしら
511 名前:login:Penguin [2008/10/17(金) 01:32:36 ID:6ubwN3MV] >>>503 >大昔のパソコン雑誌を押入れから発掘したんです。 >そこにあったのは16進ダンプファイルで掲載されていたゲーム >・・・。 やっぱりw なつかしすぎる。てか、bit数が違うから動かない予感
512 名前:login:Penguin mailto:sage [2008/10/17(金) 11:08:59 ID:4pVt9n9N] 携帯やデジカメでダンプリストを取り込んでocrソフトでテキスト化 エディタで編集修正したものをデバッガへ食わせるなんてスレ違い
513 名前:login:Penguin [2008/10/22(水) 20:50:34 ID:VC8ljHmq] $ cat love.sh what=LOVE echo "ALL YOU NEED IS $what" というファイルを改変することなく、2行目のecho文で "ALL YOU NEED IS CASH" と出力することは可能だろうか? $ cat cash.sh declare -r what=CASH source ./love.sh というのを考えてみたが実現できなかった。
514 名前:login:Penguin mailto:sage [2008/10/22(水) 21:16:44 ID:l3U9XvVs] $ sed s/LOVE/CASH/ love.sh | sh これだと改変になる?
515 名前:login:Penguin mailto:sage [2008/10/22(水) 22:28:26 ID:VC8ljHmq] あーなるほど。いただきます。
516 名前:login:Penguin mailto:sage [2008/10/22(水) 23:35:12 ID:xR/eB2K4] what=MONEY;echo '#'`cat a.sh` | sh
517 名前:login:Penguin mailto:sage [2008/10/23(木) 19:09:43 ID:+CTFy1at] 質問なんですが、atコマンドなどのログを取得して 特定のディレクトリーに吐き出すスクリプトを作成したいと思っています。 しかし、PHPやCなどはかなり触っているのでわかるのですが シェルスクリプトは全くの初心者のため、どのようにしたらいいのか見当がつきません。 簡単な例でけっこうですので、教えていただけないでしょうか。 サーバー:CentOS5.2
518 名前:login:Penguin mailto:sage [2008/10/23(木) 19:41:07 ID:ueeORYHp] え、丸投げ!?
519 名前:login:Penguin mailto:sage [2008/10/23(木) 20:18:32 ID:y4uaRh/4] Cで書きゃええではないか。
520 名前:login:Penguin mailto:sage [2008/10/24(金) 10:02:49 ID:2zYy9Dkj] >簡単な例でけっこうですので grep 'atコマンドなど' /var/log/messages > /tmp/hoge
521 名前:login:Penguin [2008/10/24(金) 20:25:05 ID:14T+pOpU] >>517 /etc/syslog.conf とか? 外してたらごめん
522 名前:login:Penguin mailto:sage [2008/11/02(日) 21:57:45 ID:AykxzKW2] シェルスクリプト関連の本って今では結構いろいろ出てるけど、どれがいいんだろう? シェルって何?って人に最適な本もあるだろうし、実務でスクリプトを書く人に最適な本もあるはず。
523 名前:login:Penguin mailto:sage [2008/11/02(日) 22:12:17 ID:XwJU1nJV] >>522 Advanced Bash-Scripting Guide tldp.org/LDP/abs/html/
524 名前:login:Penguin mailto:sage [2008/11/02(日) 22:51:26 ID:AykxzKW2] >>523 な、なにこれスゲー。今悩んでる問題が二つ解消した。たった数分読んだだけで。
525 名前:login:Penguin mailto:sage [2008/11/03(月) 00:18:52 ID:iKa/7Y2g] その2つを語ってみたまい。 「そんなことで悩んでいたのかクソ馬鹿」と罵倒してあげるから。 …いえ、ウソです。
526 名前:login:Penguin mailto:sage [2008/11/03(月) 01:46:09 ID:jQDIWjiF] 板違いだったらごめんなさい なぜ find には -exec があるんですか?パイプ では駄目?
527 名前:login:Penguin mailto:sage [2008/11/03(月) 02:48:26 ID:bJlJMSV4] #スレ違いと思うけど、それは置いて。 findに-print0が無かった頃、 find ... -print | xargs rm としたら思わぬ結果になり、 find ... -exec rm {}\; と習慣づけるようにしたような、淡い記憶がある。 記憶違いかもしれないけれど。
528 名前:login:Penguin mailto:sage [2008/11/03(月) 11:40:47 ID:+Mz0PYlF] >>526 一個一個に対してコマンドを実行したいとき。 whileとreadで回すほどでもないときに使う。 xargsはなんかそんな気分の時に使う。
529 名前:login:Penguin mailto:sage [2008/11/04(火) 00:03:44 ID:28eBvx3Z] xargs rm だと一個一個消す訳じゃないらしいけど その理屈がようわからん どうやってんの?
530 名前:login:Penguin mailto:sage [2008/11/04(火) 01:51:16 ID:lE3PYV5Z] x68000.q-e-d.net/~68user/unix/pickup?xargs
531 名前:login:Penguin mailto:sage [2008/11/04(火) 06:42:20 ID:n6LEGgbQ] >>529 xargsの場合 rm a b c d -execの場合 rm a rm b rm c rm d
532 名前:login:Penguin mailto:sage [2008/11/04(火) 18:22:21 ID:IOim9jxY] だから、findでは -delete 使うか、末尾を\+にする。
533 名前:login:Penguin mailto:sage [2008/11/04(火) 20:33:27 ID:gko7k3GT] 「だから」って… 「findに-print0が無かった頃」と予めことわっているのに、 やはり無かった"-delete"とかを持ち出されても。
534 名前:login:Penguin mailto:sage [2008/11/04(火) 21:23:41 ID:W3AqIadF] -deleteなんてあったんだorz。 使い古したコマンドでも時々manを見るべきだな。
535 名前:login:Penguin [2008/11/08(土) 01:22:38 ID:/AB41I5S] どなたかご教授ください。 以下のような形式のログファイル(test.log)の処理を行っています。 # cat test.log 日付 ・・・・必要な情報@・・・・・・・必要な情報A・・・・・・・・・ 日付 ・・・・・・・・・・必要な情報@・・・・・・・・必要な情報A・・・・・ ※「・・・」には、ログのその他、不要な情報が入っています。 このtest.logの中で、1,2行目の必要な情報@と必要な情報Aのみを 抜き出して、別ファイルに保存したいです。 ■保存したい例 必要な情報@ 必要な情報A 必要な情報@ 必要な情報A awkを使おうと思ってたのですが、必要な情報の列(位置)が、 ログの行によって、まちまちでawkで処理する事が出来ません。 この「必要な情報」については、目印となる文字列が含まれているのですが、 grepのようなコマンドで、検索キーワードが含まれる行を抜き出すのではなく、 検索キーワードの該当する文字列そのものを抜き出すような方法は無いでしょうか。 分かりにくい説明で申し訳ありません。アドバイス頂ければと思います。 bashが良いのですが、他のシェルでも方法がありましたら、ご教授ください。
536 名前:login:Penguin mailto:sage [2008/11/08(土) 02:20:54 ID:Sn/dZhVJ] ^[^キーワード]*,と,[*キーワード]*$ をsedとかで消しちゃえばいいんじゃない?
537 名前:login:Penguin mailto:sage [2008/11/08(土) 08:26:09 ID:spq9OVhg] 「・・・」と略されたら、必要な情報と不要な情報の区切が解らへん。
538 名前:login:Penguin mailto:sage [2008/11/08(土) 10:43:36 ID:QmgRkUw9] awk を使うのなら、たとえば、こういうデータに対して aaa word1 bbb word2 ccc ddd word3 eee word4 fff zzz yyy xxx word5 ggg hhh iii #!/usr/bin/awk -f { line = "" for (i = 1; i<=NF; i++) { if ($i ~ /word/) { line = line "\t" $i } } sub(/^\t/, "", line) if (line != ""){ print line } } というのはどう? 改良の余地は大いにあると思うけれど。
539 名前:login:Penguin [2008/11/09(日) 00:42:41 ID:+8LPtwQh] bashでの配列について教えてください ファイルの内容を1行づつ読み込んで、変数に格納するには どうすれば良いでしょうか。
540 名前:login:Penguin mailto:sage [2008/11/09(日) 00:53:45 ID:WldBda9P] つ while read i; do echo $i; done < file つ IFS=' ' FILE=(`cat /etc/passwd`) echo ${FILE[21]}
541 名前:login:Penguin [2008/11/09(日) 01:04:17 ID:+8LPtwQh] >>540 ありがとうございました! こちらのほう、使わせて頂きます。 FILE=(`cat /etc/passwd`) echo ${FILE[21]}
542 名前:login:Penguin mailto:sage [2008/11/10(月) 00:15:54 ID:ZSdeBKA2] read
543 名前:login:Penguin mailto:sage [2008/11/10(月) 00:35:00 ID:KJ/5CLnz] 複数ディレクトリにある重複して存在してるファイルをリストアップしたいんですけど (同じ名前とは限らない) find dirA dirB dirC -exec cksum {} \; でチェックサムを出したところまではいいんだけど この値が一致してたらリスト出力するってのはどうすればいいでしょう?
544 名前:login:Penguin mailto:sage [2008/11/10(月) 07:43:00 ID:J2OShanR] 一致行の出力でよければ、 $ find ... | sort | uniq -OPTION 何かオプションが要るような気がするので、uniq(1)を見て。
545 名前:login:Penguin mailto:sage [2008/11/10(月) 12:58:27 ID:25jIkch2] >>535 awkでできないことなんかないよw 処理速度はきついが 普通に 【必要な情報】で検索すればいいだろ?列なんか関係なしに。
546 名前:login:Penguin mailto:sage [2008/11/10(月) 19:22:12 ID:zHbtNtaX] >>543 なんかいまいち find "$@" -type f -exec cksum \{\} \; | sort -k 1,2 | \ awk '{ if (c == $1 && s == $2) { print l, $0; l = ""; } else { c = $1; s = $2; l = $0 "\n" } }'
547 名前:login:Penguin mailto:sage [2008/11/10(月) 19:28:01 ID:K/Z638b2] 前スレの683-に出てたので参考までに
548 名前:login:Penguin [2008/11/10(月) 20:17:51 ID:TV5/2e6C] >>535 sed 正規表現 置換 パターンマッチ(\1 \2とか) ?
549 名前:login:Penguin [2008/11/10(月) 20:21:36 ID:TV5/2e6C] >>543 uniqは-wと-dが肝 あとfindには-type fも
550 名前:login:Penguin mailto:sage [2008/11/11(火) 00:28:16 ID:aoTr0xeG] 重複ファイルのリストアップ、まだやってたのか。 ほれ。 つ find a b -type f | xargs md5sum | sort | uniq -D -w 32
551 名前:login:Penguin mailto:sage [2008/11/11(火) 08:00:53 ID:bvC0wffI] いや、もうやっていない。10日が〆切だった。残念。
552 名前:login:Penguin mailto:sage [2008/11/11(火) 21:21:58 ID:sJWsKHcQ] 出力結果をテキストに書き出す時、複数行あるものを一行にまとめるにはどうすればいいですか?
553 名前:login:Penguin mailto:sage [2008/11/11(火) 21:25:37 ID:Skn7DdSq] >>552 改行を削除する
554 名前:login:Penguin mailto:sage [2008/11/11(火) 21:44:28 ID:sJWsKHcQ] 削除のためのコマンドが知りたいです。 trで改行を空白に置き換えるのはダメでした。
555 名前:login:Penguin mailto:sage [2008/11/11(火) 21:44:56 ID:CoD3HoI5] 個人的によくやるのは、 command | gawk '{printf("%s",$0)}'
556 名前:login:Penguin mailto:sage [2008/11/11(火) 22:05:38 ID:mJ48vZc0] tr -d じゃダメなの?
557 名前:login:Penguin mailto:sage [2008/11/11(火) 22:05:59 ID:sJWsKHcQ] ありがとうございます 試してみます
558 名前:login:Penguin mailto:sage [2008/11/11(火) 23:38:49 ID:et4tOJwy] cat hoge | tr -d "\n" > piyo こんなんで どうでしょうか
559 名前:login:Penguin mailto:sage [2008/11/12(水) 00:24:39 ID:xwzZIHRk] linuxのcrontab なスレが見つからなかったのでここで質問させてください Debian なのですが、 例えば 午前8時から18時まで20分おきにあるスクリプト(get-data.sh)を起動したいのですが /etc/cron.d/get-data.sh を用意して、 */20 8-18 * * * oreore /usr/local/get-data.sh というエントリを登録したのですが、実行されません。 */20 * * * * oreore /usr/local/get-data.sh だと20分おきに実行されます。 前者の記述はどこがおかしくて実行されないんでしょうか?
560 名前:login:Penguin mailto:sage [2008/11/12(水) 00:39:11 ID:eUoTfImJ] 記述はあってるけど、get-data.sh ってほんとはどこにおいてるの?
561 名前:login:Penguin mailto:sage [2008/11/12(水) 00:54:56 ID:81ljxwzq] >>559 レンジ指定を時と分で両方やるってかち合っちゃうんじゃないかな? 恐らく 0,20,40 8-18 * * * oreore /usr/loca/get-data.sh は出来るはず。
562 名前:login:Penguin mailto:sage [2008/11/22(土) 15:37:29 ID:qj5ispiW] cygwin環境なんですが P=00010001 Q=`expr length $P` R=`echo "32-$Q"|bc -l` for i in `seq $R` do P="0"`echo $P` done echo $P 不細工ですが、二進数の桁をそろえるスクリプトを書こうとしています 実行したところ、seq: invalid floating point argynebt 24 というエラーが出てしまいます bcの計算結果が整数として代入されず、seqの引数として不適当という事じゃないかな、と考えてるのですが じゃあどうしたらいいのか?とmanを読んでもさっぱり解りません どなたか教えてください
563 名前:login:Penguin mailto:sage [2008/11/22(土) 15:47:57 ID:XCvIqY7p] >>562 cygwin 使ってないから外してるかもしれんけど、 > R=`echo "32-$Q"|bc -l` > > for i in `seq $R` > 実行したところ、seq: invalid floating point argynebt 24 というエラーが出てしまいます $R に変な改行コードまで入ってるんじゃないの?
564 名前:login:Penguin mailto:sage [2008/11/22(土) 17:33:09 ID:8Embcy7k] 質問から外れるが、わしなら、 perl -e 'printf("%032b\n", 0b10001 )' とかで済ましてしまう気がする。
565 名前:login:Penguin [2008/11/22(土) 17:36:52 ID:lvsMYtv2] >>562 こっちのLinuxやCygwinは正常に実行できるよ ただ双方の環境とも $ seq "24 " って末尾にスペースくっつけてやると seq: invalid floating point argument: 24 ってなるよ もしかして後ろに何かくっついてる? # 敢えてロジック書くのは、勉強の為のシェルスクリプトかな
566 名前:login:Penguin mailto:sage [2008/11/22(土) 18:38:22 ID:qj5ispiW] >>563 >>562 試行錯誤しているうちに実行できました >$ seq "24 " >って末尾にスペースくっつけてやると ご指摘の通り、やはり余計な文字が入っていたのが原因のようでした よく解らないのですが、バッククォート部分にスペースが入り込んでいたのが悪かったかな…? >>565 >>564 >質問から外れるが ># 敢えてロジック書くのは、勉強の為のシェルスクリプトかな 一応目的があってやっていることなのですが、いちいち調べて勉強しないことには 前に進めない状態です… 正直調べる事に疲れてしまって、目的を遂げられるならもう何でもいいのですが…
567 名前:login:Penguin mailto:sage [2008/11/22(土) 18:39:59 ID:qj5ispiW] 肝心のお礼を忘れてしまいました >>563->>565 ありがとうございました これで何とか一歩前進です
568 名前:login:Penguin mailto:sage [2008/11/23(日) 01:16:33 ID:ahm0Z7lP] Cygwin は Linux じゃねーよ。
569 名前:login:Penguin [2008/11/24(月) 11:45:40 ID:qXSmazjs] echoでシングルコートで囲まれた文字列の中に、シングルコートとダブルコートを含ませた文字列を指定したいんだが、 以下のようになってしまう。 $ echo 'hello'"hello' > エスケープしてもだめだったんだが、どうすればいいんでしょうか?
570 名前:login:Penguin mailto:sage [2008/11/24(月) 11:48:58 ID:Ut9dLgFH] $ echo "hello'\"hello" hello'"hello
571 名前:login:Penguin mailto:sage [2008/11/24(月) 12:27:14 ID:lGu01kSy] 悪のりしたる。 $ echo 'hello\047\042hello' hello'"hello
572 名前:>>569 [2008/11/24(月) 14:10:49 ID:qXSmazjs] >>570 ありがとう! ちなみに、あえてシングルコートで文字列を囲みたい場合は、どうすればいいんですか? やっぱできませんかねぇ、、、
573 名前:login:Penguin mailto:sage [2008/11/24(月) 14:11:33 ID:O/sQuX/l] >>569 ダブルクオートを閉じてないから,続きの入力を求められてる。 シングルクオートの中ではエスケープできないから, シングルクオートを表示したかったら,ダブルクオートで囲むしかないね。
574 名前:login:Penguin [2008/11/24(月) 14:16:50 ID:qXSmazjs] >>573 へー、ためになります。
575 名前:login:Penguin mailto:sage [2008/11/24(月) 14:42:30 ID:UgOcYWXS] >>572 こうゆうことか? $ echo 'hello'\''"hello' hello'"hello
576 名前:login:Penguin mailto:sage [2008/11/24(月) 15:29:36 ID:WL2QfG05] >>575 シングルクォートの外じゃん。
577 名前:login:Penguin [2008/11/25(火) 01:20:38 ID:r0vzabBk] ログのディレクトリを消去したいと思うのですが、 rm -rf /var/hoge/log/* とすると/bin/rm Argument list too longと出てしまって消せません。 どうやったら 消せるでしょう? サブディレクトリもあります。
578 名前:login:Penguin mailto:sage [2008/11/25(火) 01:46:29 ID:xvFoqJfe] >>577 rm -rf /var/hoge/log mkdir /var/hoge/log /var/hoge/log/.moge は残したい、って場合はこれじゃだめだけど。
579 名前:login:Penguin mailto:sage [2008/11/25(火) 02:30:00 ID:qwKBFJS7] いや普通に考えたら find /var/hoge -exec rm {} \; とか find /var/hoge | xargs rm だろ?
580 名前:login:Penguin mailto:sage [2008/11/25(火) 02:34:44 ID:WFFUc0FW] for i in /var/hoge/log/*;do rm -rf $i;done じゃなくて?
581 名前:login:Penguin mailto:sage [2008/11/25(火) 02:36:41 ID:qwKBFJS7] >>580 ファイル多すぎて*展開できなくてエラーになってんだから無理じゃね?
582 名前:login:Penguin mailto:sage [2008/11/25(火) 02:39:23 ID:gfINAer7] >>577 echo /var/hoge/log/* | xargs rm -rf >>579 find 使うなら maxdepth とか使わないと無駄に処理が増えると思う。
583 名前:login:Penguin mailto:sage [2008/11/25(火) 02:53:59 ID:qwKBFJS7] >>582 いやだからファイル多すぎて*展開できないからエラーなんだろ? echoにも渡せないと思うんだけど・・・ 気のせいだったらすまんけど
584 名前:login:Penguin mailto:sage [2008/11/25(火) 02:57:22 ID:WFFUc0FW] シェルが*を展開するところまではできてるでしょ。 その結果をシェルからまとめて渡されたrmがエラー吐いてる訳で >/bin/rm Argument list too long
585 名前:login:Penguin mailto:sage [2008/11/25(火) 03:09:26 ID:qwKBFJS7] ああ確かにその通り echoの引数はARG_MAX超えても大丈夫?で、 xargsはrmに渡すときに調整?してくれるからこれが一番軽いと・・ 覚えときます
586 名前:login:Penguin mailto:sage [2008/11/25(火) 03:10:33 ID:gfINAer7] >>580 以前、くだ質にも同じこと書いた気がするけど rm を for 文の外に出して for i in AAAA/* ; do echo $i ; done | xargs rm -rf とかやった方が早いよ。 # 速度なんか気にしてないってのならスルーしてくれ。
587 名前:577 mailto:sage [2008/11/25(火) 04:35:06 ID:r0vzabBk] 色々提案ありがとうございます。 勉強になりました。 特に*はシェルには展開されている けどコマンドで弾かれているという認識は参考になります。 さて、最終的に採用したいと 思いますのは>>578 さんの rm -rf /var/hoge/log mkdir /var/hoge/log です。 これが圧倒的に早い。 1万個の空ファイルを削除するのに>>586 ですと 2.9秒ほどかかったのですが、>>578 ですと0.5秒ぐらいで終わっちゃいます。 やはり1つのバイナリの中で完結してしまうのは強いですね。 ありがとうございました。
588 名前:login:Penguin mailto:sage [2008/11/25(火) 07:54:57 ID:xvFoqJfe] find とか xargs の構文を忘れてても >>578 ならすぐ実行できるし。 もっと早く /var/hoge/log/ の使用を再開したいなら↓で。 mv /var/hoge/log /var/hoge/log.old mkdir /var/hoge/log rm -rf /var/hoge/log.old &