[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/09 19:35 / Filesize : 221 KB / Number-of Response : 848
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト総合@LINUX Part5



1 名前:1様 [2009/04/03(金) 22:17:43 ID:0qFlvOW9]
UNIX板のスレを見ている方も多数おられるかと思いますが、
まあそれはそれとして、BASHウゼーとか言われる心配なく
平和にLINUX的スクリプト談義しましょうよ。

初めての自作スクリプト、自信ないから見てください。な初心者から
トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで
いろいろな人に参加して頂けると嬉しいです。

perlやらPythonやらの話が混ざっても良いんでない?

Part4 : pc11.2ch.net/test/read.cgi/linux/1210999497/
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あたりに色々と。

528 名前:login:Penguin mailto:sage [2010/02/07(日) 16:06:14 ID:lbKDrfi6]
>>526,527
ありがとう。


529 名前:526 mailto:sage [2010/02/07(日) 19:06:47 ID:dchTEc3Z]
>>527
おまwww

df -h /tmp | awk '/\/tmp/ { print gensub("%", "", "", $5) }'

530 名前:login:Penguin mailto:sage [2010/02/07(日) 19:16:50 ID:U7v7s3zM]
いやそれくらい知ってる

531 名前:login:Penguin mailto:sage [2010/02/07(日) 19:30:22 ID:Fd1qGpin]
複数行のキーワードをfgrepする手はないスか?
キーワードの行数は不定。以下例では仮に2行とします。
$ cat -n text
1  abcdefg*******
2  [hijklmn-z]
3  abcdefg*******
$ fgrep 'abcdefg*******なんとか[hijklmn-z]' text
text:1:abcdefg*******
text:2:[hijklmn-z]
1と2行目のペアはヒットするが、3行目がヒットしてはいけない。

532 名前:531 mailto:sage [2010/02/07(日) 19:32:00 ID:Fd1qGpin]
ああっと。
上の検索コマンドはgrepファミリーでなくても良いですが、perlは駄目です。

533 名前:login:Penguin mailto:sage [2010/02/07(日) 19:58:16 ID:KEZIcPfj]
宿題は自分でやれよ

534 名前:login:Penguin mailto:sage [2010/02/07(日) 21:03:26 ID:U7v7s3zM]
#!/bin/bash
AWKFILE="/tmp/$0.$$"
trap "rm -f ${AWKFILE}" 0
KV=0
echo "BEGIN{s=0;h=\"\"};" > "${AWKFILE}"
for keyword in $*; do
echo "/${keyword}/{if (s==${KV}){s=s+1;h=h NR \"\\t\" \$0 \"\\n\";} else {s=0;h=\"\"}};"
KV=`expr ${KV} + 1`
done >> "${AWKFILE}"
echo "{if (s==$#){print h;s=0;h=\"\";}};" >> "${AWKFILE}"
awk -f "${AWKFILE}"

535 名前:login:Penguin mailto:sage [2010/02/07(日) 21:24:02 ID:U7v7s3zM]
いろいろ残念な部分があるけど、そこは使う人が直してね

536 名前:login:Penguin mailto:sage [2010/02/07(日) 21:36:26 ID:5ZhdKpPZ]
>>534
んー。やっぱりスクリプト生成みたいになりますか。
私以外の人が考えてもすっきり行かない事が解りました。ありがとうございます。

>>533
この手の宿題を出す学校はあまり無いんじゃないかな。



537 名前:login:Penguin mailto:sage [2010/02/07(日) 21:41:15 ID:U7v7s3zM]
自分でできない部分だけ聞きなよ

538 名前:login:Penguin mailto:sage [2010/02/07(日) 21:51:00 ID:UYJWIskO]
>>536
質問に答えようとしてない奴の発言にはいちいち反応するな。

「教えてくれ」ってやつと「宿題は自分でやれ」ってやつは
「歩み寄る可能性がない」からスルーしたほうがいい。
専ブラ使える環境なら、NGワードに「宿題」って単語を入れておいたほうがいいよ。

539 名前:login:Penguin mailto:sage [2010/02/07(日) 22:05:12 ID:U7v7s3zM]
>>531はいろいろ引っかかる部分があるから正直俺も最初は回答しようかどうか迷ったぞ
返事を聞いて>>538も出てああやっぱりかと思ったし...

と戯言はここまでにしとく

540 名前:login:Penguin mailto:sage [2010/02/07(日) 22:36:33 ID:5ZhdKpPZ]
>>537
>自分でできない部分だけ聞きなよ
すっきりと実現できなかったので尋きました。というか、
往々にしてこの手のことを実現すると車輪の再発明になってしまってる事が多い。
なので、他の人も決定的な車輪を持ちあわせていないという情報はとても大切で、
有難く思っています。

541 名前:login:Penguin mailto:sage [2010/02/07(日) 22:44:49 ID:qrQKR8fu]
典型的なゆとり脳というか
なんでこんな上から目線なんだろ
そういうのは自分で書いたの張ってから言えよ

542 名前:login:Penguin mailto:sage [2010/02/07(日) 22:46:48 ID:U7v7s3zM]
>>540
実現できたなら実現方法そのものを聞く必要はない
実現方法を提示してより良くするにはどこを直せばいいか聞けばいい
他人のコストは格段に違うだろうし、回答も違ったものになる

というかお前>>526だろ?


543 名前:526 mailto:sage [2010/02/07(日) 23:05:32 ID:sirvd3yi]
こらこらw
静観してる俺まで巻き込むなよ

544 名前:login:Penguin mailto:sage [2010/02/07(日) 23:09:51 ID:fkJC7wtF]
>>542
そうですね。その点は気をつけたいと思います。

>というかお前>>526だろ?
いや違う。
むしろ、>>529(526)にしろあなたにしろ"/tmp"をマッチさせている時点で、要求条件から逸脱していると思っている。

545 名前:login:Penguin mailto:sage [2010/02/07(日) 23:30:09 ID:U7v7s3zM]
ID変えながら大変ですね。元に戻せないの?

546 名前:login:Penguin mailto:sage [2010/02/07(日) 23:44:26 ID:sirvd3yi]
どうやって戻すんだよw



547 名前:login:Penguin mailto:sage [2010/02/07(日) 23:49:53 ID:qVmLGOqM]
昼間寝ていたら正規表現使う夢を見た気がする、なぜだ

548 名前:login:Penguin mailto:sage [2010/02/07(日) 23:56:03 ID:U7v7s3zM]
同じIPが取れるまでトライ!(やったことないので同じになるのか知らん)

549 名前:login:Penguin mailto:sage [2010/02/08(月) 06:35:08 ID:wgsJNc2d]
>>548
お前ちょっと黙れ。

550 名前:login:Penguin mailto:sage [2010/02/08(月) 08:30:32 ID:shLyrCGR]
U7v7s3zMが取れるまでトライし続けてるのかなw

551 名前:login:Penguin mailto:sage [2010/02/08(月) 12:19:18 ID:2AE05UQA]
答えてもらっておいて「まあそんなもんだよね」

これはひどい

552 名前:login:Penguin mailto:sage [2010/02/08(月) 17:02:25 ID:h/fx9poh]
複数の数字に,同じ四則演算(+,−,*,/)を繰り返した計算結果を表示するシェルスクリプトを,cshシェルスクリプトで書け。
(基本仕様)
@ コマンドとして実行できる.(シェルコマンドである.)
A 入力した数字を計算できる.
B 入力できる数字の個数は2以上とする.
C 四則演算子(+,−,*,/)を選択,または直接入力して
数字1□数字2□・・・□数字N (□=+ or − or * or /,N≧2)
の計算結果を出力する.
D 四則演算子以外の記号が入力された場合,エラーメッセージを出力する.
(ポイント)
? シェルコマンドにするには,スクリプトの最初に(#!で始まる)おまじないを書く.
? 標準入力から文字列を入力するには $< を用いる.
? コマンドラインに引数を指定した場合は,その引数は変数$argvに格納されている.その各要素を参照するには,$argv[1],$argv[2](または$1,$2)などとする.
? 四則演算には @ コマンドが使用できる.(ただし,整数しか扱えない.)

誰かわかるひとおねがいします(今週中にお願いします!)

553 名前:login:Penguin mailto:sage [2010/02/08(月) 17:05:28 ID:llGt0cFK]
何箇所でマルチしてんだよwww

554 名前:sage [2010/02/08(月) 17:06:29 ID:kDoV0MXx]
宿題は自分でやろうね。

555 名前:login:Penguin mailto:sage [2010/02/08(月) 20:38:54 ID:Wyshj96C]
後から読んで526にワロタ
カワイソスw

556 名前:login:Penguin mailto:sage [2010/02/19(金) 00:14:13 ID:c2ocdmWw]
df -h /tmp | sed 's/.*\([0-9][0-9]*\)%.*/\1/'



557 名前:login:Penguin [2010/02/20(土) 23:34:54 ID:vDEbYPUT]
以下の結果を出力するシェルを,bashスクリプトで書け.
(基本仕様)
・コマンドとして実行できる.(シェルコマンドである.)
・ユーザーが10000以上99999以下の5桁の数字を入力する.
・その数字を7で割って1余り,かつ13で割って2余った場合は Daikichiと表示する.
・それ以外で,13で割って2余った場合は Chuukichiと表示する.
・それ以外で,7で割って1余った場合は Shoukichiと表示する.
・それ以外の場合は Hazureと表示する.
・入力した文字が10000以上99999以下の数字以外の場合はエラーメッセージを表示する.
・できる人は,コマンドライン引数でDaikichiなどの文字を変更できるようにする.
(ポイント)
☆シェルコマンドにするには,スクリプトの最初に(#!で始まる)おまじないを書く.
☆標準入力から文字列を入力するには read を用いる.
☆コマンドラインの引数は,$@に格納されている.(その要素は $1 $2 ...)
☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.)


誰かわかるひとお願いします

558 名前:login:Penguin mailto:sage [2010/02/20(土) 23:37:36 ID:8qh4FPc7]
>>557
> 誰かわかるひとお願いします
まぁ、Linux使える人ならば、誰でも分かる
"学校" の課題ですわな(w
# "学校" は 大学 でない。

559 名前:login:Penguin mailto:sage [2010/02/20(土) 23:46:16 ID:WE3Utbg7]
シェルスクリプトの課題を出す学校ってあるんだね。
ふつーは、CとかJavaを中心にやるものだと思ってた。

560 名前:login:Penguin [2010/02/21(日) 00:00:05 ID:WDiWxw8N]
#!/bin/bash
read read
echo $((read%3))`echo 5p$(echo e$(echo l5b$(echo 6M5)q2)744$(echo GsCg$(echo =$(echo =))))|base64 -d`

561 名前:login:Penguin mailto:sage [2010/02/21(日) 00:16:12 ID:FUNRtF1w]
死ねばいいのに

562 名前:login:Penguin mailto:sage [2010/02/21(日) 00:27:29 ID:R8eJDQx8]
何をお願いされているのだろう。アンケートかな?
回答「わかります」


上から2桁目で四捨五入したい(例: 15 -> 20, 312 -> 300, 9432 -> 9000)
どうやるのが一番簡単かな?

563 名前:login:Penguin [2010/02/21(日) 00:39:34 ID:y6fTjKHz]
10を底とした対数とって
1.5*10^1
3.12*10^2
9.432*10^3
仮数部を小数点以下で四捨五入する

564 名前:login:Penguin [2010/02/21(日) 01:05:26 ID:y6fTjKHz]
全然対数じゃないや

565 名前:login:Penguin mailto:sage [2010/02/21(日) 01:20:23 ID:mOFZBUIZ]
>>557
お前UNIX板のシェルスクリプトスレでも宿題は自分でやれって言われてただろ
マジで死ね

566 名前:login:Penguin [2010/02/21(日) 02:00:25 ID:y6fTjKHz]
$ echo 'x=9432; beki=l(x)/l(10.0); scale=0; beki/=1; scale=10; y=x/(10^beki); y+=0.5; scale=0; y/=1; y*=(10^beki); scale=0; y/=1; y;' | bc -l
9000
一応、15, 312, 9432 については期待の値になった。



567 名前:login:Penguin mailto:sage [2010/02/21(日) 02:38:10 ID:ymcnTK5S]
>>566
しかし4432613で矛盾が出た。

568 名前:login:Penguin [2010/02/21(日) 08:29:04 ID:y6fTjKHz]
違うかね?
4432613 = 4.432613 * 10^6
→ 4.4*10^6 → 4.0*10^6 = 4000000
>>562 さんに聞いてみようか。
入力4432613での期待値は、
上から2桁目の"4"で四捨五入して、4000000 でよろし?
3桁目の"3"でして、4400000 ではなくて。

569 名前:login:Penguin [2010/02/21(日) 09:26:12 ID:y6fTjKHz]
少しコメント入れました。ダメな場所はどなたか直してください。
echo 'x=4432613;
# x=y * 10^d 表現にする
d=l(x)/l(10);
scale=0; d/=1;
scale=1; y=x/(10^d);
# yの小数点第一位を四捨五入して整数に。
y+=0.5; scale=0; y/=1;
# 元の桁数に戻す。
z=y*(10^d);
z;
' | bc -l

570 名前:login:Penguin [2010/02/21(日) 11:49:45 ID:y6fTjKHz]
アプローチを変えて文字列処理にしてみた
$ echo 4432613 | perl -npe 's/^(\d)(\d)(\d+)/$1+($2>4) . 0 . 0 x length($3)/e;'


571 名前:login:Penguin [2010/02/21(日) 12:23:46 ID:y6fTjKHz]
$ echo 15 | perl -npe 's/^(\d)(\d)(\d*)/$1+($2>4) . 0 . 0 x length($3)/e;'


572 名前:login:Penguin [2010/02/21(日) 13:04:19 ID:y6fTjKHz]
#!/bin/ksh
v="$1"
a=${v:0:1}
b=${v:1:1}
c=${v:2}
[ $b -gt 4 ] && a=$((a+1))
b=0
c=$(echo $c | tr 0-9 0)
echo "$a$b$c"

573 名前:login:Penguin mailto:sage [2010/02/21(日) 13:09:12 ID:7QPAwQGI]
ん、よくわからんけど……
乙 w

574 名前:562 mailto:sage [2010/02/21(日) 19:12:39 ID:R8eJDQx8]
なんかすごいものがw

>>568
>入力4432613での期待値は、
>上から2桁目の"4"で四捨五入して、4000000 でよろし?
よろしです。

パッと見で>>571がスマートですね
シェルからこいつを呼ばせて貰おうと思います
ありがとうございましたm(_ _)m

575 名前:login:Penguin [2010/02/21(日) 20:33:49 ID:y6fTjKHz]
>>507
ttp://sourceforge.jp/projects/sfnet_pipestatus/
ど根性に脱帽

576 名前:login:Penguin mailto:sage [2010/02/26(金) 00:26:14 ID:DYTaEvQS]
自分自身(ファイル)をサーバにuploadするシェルスクリプトって可能ですか?

具体的には、ちょこちょこ定期的にレンタルサーバにuploadしたいファイル群があるのでシェルスクリプトを書きたいのですが、
そのシェルスクリプトファイル自身もuploadしたいのです。



577 名前:login:Penguin mailto:sage [2010/02/26(金) 00:29:09 ID:C/OfvsKM]
まず、なぜ不可能だと考えたのか、そこから聞こうか。

578 名前:login:Penguin mailto:sage [2010/02/26(金) 00:37:26 ID:DYTaEvQS]
今実行中のファイルを操作するってのがいけないことなのかなぁと…

579 名前:login:Penguin mailto:sage [2010/02/26(金) 00:39:36 ID:dGd2Emr5]
自身のunlinkすら可能だというに

580 名前:login:Penguin mailto:sage [2010/02/26(金) 00:56:31 ID:7suOgZ+f]
アップロードどころか実行中のスクリプトを編集することもできるよー

581 名前:login:Penguin [2010/02/26(金) 21:44:10 ID:ZUmR/bTp]
以下の結果を出力するスクリプトを,UNIXシェルで書け.
(基本仕様)
・コマンドとして実行できる.(UNIXシェルである.)
・主人公、妹1名、両親、自分の友人数名(うち最低1名は女性、半数以上は男性とする)、妹の友人(女性)数名が登場する.
・主人公、妹、自分の友人、妹の友人はいずれも生徒もしくは学生とする.
・両親のうち、父は総合商社勤務のサラリーマン、母は専業主婦とする.
・主人公の言動やイベントの発生にともない、各キャラのパラメータを変化させる.
・病弱な妹を思いやる兄と妹の交流を中心に、他の登場人物との友情や恋愛を描写する.
・エンディングは妹、もしくは妹の友人のいずれかと深い恋愛関係になるか、誰とも親密に慣れないバッドエンディングになるようにする.
・妹と恋愛関係が深まる場合、病弱な妹への思いやりが徐々に、自然に恋愛感情へ変化するように描写する.
・ゲームの操作方法はコマンド選択式またはコマンド入力式とする.
・すべてUNIXシェル内部で処理し,外部コマンドは呼び出さないこと.
(ポイント)
☆UNIXシェルにするには,ファイルの最初に #!/bin/bashというおまじないを書く.
☆コマンド選択方式のゲームにする場合、select文を使用できる。
☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.)


誰かわかるひとお願いします

582 名前:login:Penguin mailto:sage [2010/02/26(金) 21:49:36 ID:ueeczQLj]
さようなら

583 名前:login:Penguin mailto:sage [2010/02/26(金) 22:36:07 ID:PyskErwP]
>>581
UNIXシェルってなんだ?

584 名前:login:Penguin mailto:sage [2010/02/26(金) 22:53:51 ID:nq/ujwuR]
>>581
いろいろ拡張されてきたなw


585 名前:login:Penguin mailto:sage [2010/02/26(金) 23:01:55 ID:UQaFhRqQ]
自演ウザス

586 名前:login:Penguin mailto:sage [2010/02/27(土) 08:37:06 ID:dxtkbNS9]
素直にワラタ



587 名前:login:Penguin [2010/02/28(日) 01:11:29 ID:oz3AO1O4]
シェルスクリプトとVBA、どちらが簡単ですか?

588 名前:login:Penguin mailto:sage [2010/02/28(日) 01:13:35 ID:XA1Dii88]
シェルスクリプト

589 名前:login:Penguin mailto:sage [2010/02/28(日) 01:20:34 ID:oz3AO1O4]
>>588
シェルスクリプトと比較して、VBAはどこがどんな風に難しいのでしょうか?

590 名前:login:Penguin mailto:sage [2010/02/28(日) 01:37:41 ID:XA1Dii88]
用途が全然違う

VBA=MS製品の補助、高度なことやろうと思ったらVBの型とか定数とかメソッドとかプログラミング言語として覚えないといけない
シェルスクリプト=普段から使っているコマンド郡の応用、データの流れとアルゴリズムさえ判れば外部プログラム呼び出して何でも出来る

591 名前:login:Penguin mailto:sage [2010/02/28(日) 01:52:34 ID:oz3AO1O4]
>>590
疑問なのは、なぜアプリケーションの補助がそんなに難しいのか、
もっと簡単にできなかったのか、それでは普通の人に使えないのではないか、
という点です。
Linuxで表計算っぽいことができる言語というとawkがありますけど、
あれくらい簡単だったら誰でも使えると思うのですが。
マクロ言語がエンドユーザ言語として使われるためには簡単でなければならないはず。
それなのにシェルスクリプトより難しいというのは、その目的にそぐわないような気がするのですが。

592 名前:login:Penguin mailto:sage [2010/02/28(日) 01:55:02 ID:C3UADE41]
VBAの質問ならよその板でやっとくれ。

593 名前:login:Penguin mailto:sage [2010/02/28(日) 01:56:36 ID:oz3AO1O4]
>>592
VBAについて知りたいというよりも、
シェルスクリプトとVBAの違いというか、
際立った特徴のようなものがあれば、それを知りたいんです。

594 名前:login:Penguin mailto:sage [2010/02/28(日) 02:06:41 ID:B/kw3N2G]
>>593
そもそも活用シーンが全然違うのに比較してどうする。根本が間違っている。
比較するならWSHとだろう。

595 名前:login:Penguin mailto:sage [2010/02/28(日) 02:12:43 ID:oz3AO1O4]
>>594
WSHもWindows PowerShellも
エンドユーザにはあまり受け容れられていないように見受けられます。
Linux/UNIX/MacOSXのエンドユーザでもスクリプトを全く書かない人はいますが、
Windowsよりはそういう人が少ないと思います。
単純にWindowsのほうがヘビーユーザ率が低いというもあるでしょうが、
それだけでなく、Windowsで使われるそれらの言語が
そもそもエンドユーザに適さない欠点を有しているからではないのでしょうか?
とすると、逆にシェルスクリプトはどういう点でそれらより優れているのでしょうか?

596 名前:login:Penguin mailto:sage [2010/02/28(日) 02:20:34 ID:B/kw3N2G]
>>595
だからさー比較する前提条件が間違っている。



597 名前:login:Penguin mailto:sage [2010/02/28(日) 02:24:04 ID:oz3AO1O4]
>>596
WSHと比較するようにアドバイスされたので、そうしたのですが。

598 名前:login:Penguin mailto:sage [2010/02/28(日) 02:31:01 ID:v9A/VFIk]
シェルスクリプトと比較するべきはバッチファイル。
君の質問は「バッチファイルとVBA、どちらが簡単ですか?」という事になるから
この板で聞く事じゃない。

599 名前:login:Penguin mailto:sage [2010/02/28(日) 02:33:03 ID:oz3AO1O4]
>>598
バッチファイルなんて論外でしょう。
あれとシェルスクリプトを一緒にするのはやめましょう。

600 名前:login:Penguin mailto:sage [2010/02/28(日) 02:43:10 ID:v9A/VFIk]
VBAと一口に言ってもWord、Excel、Access、Outlook…全然違うぞ?

601 名前:login:Penguin mailto:sage [2010/02/28(日) 02:44:34 ID:B/kw3N2G]
っていうかスレチ。
いちいちageているし、これ以上続けるならレス乞食とみなしてあぼーんする。

くだ質いけ。

602 名前:login:Penguin mailto:sage [2010/02/28(日) 02:47:24 ID:C3UADE41]
くだ質に来られても困るな。
ム板にでも行ってくれ。

603 名前:login:Penguin mailto:sage [2010/02/28(日) 02:52:42 ID:oz3AO1O4]
WSH(VBScript)で「C:\TechEzo\Round23.txt」内の「ようこそ」を含む行を表示する

Set fso = CreateObject("Scripting.FileSystemObject")
Set regEx = New RegExp
Set tempFile = fso.OpenTextFile("C:\TechEzo\Round23.txt")

regEx.Pattern = "ようこそ"
Do Until tempFile.AtEndOfStream
tempLine = tempFile.ReadLine
If regEx.Test(tempLine) Then
WScript.Echo tempLine
End If
Loop

これを見て「オブジェクト指向だから素晴らしい」とか
「シェルスクリプトに比べて簡単」とか思う人はいないでしょう。
管理者や一般のエンドユーザなど、ノンプログラマも使う言語を
こんなふうに設計したMSは頭が悪いとしか思えないです。

604 名前:login:Penguin mailto:sage [2010/02/28(日) 03:01:02 ID:SsRM0ruv]
マルチ相手によーやるな

605 名前:login:Penguin mailto:sage [2010/02/28(日) 09:04:34 ID:JCw0fVKj]
>>603
Window Power Shellもしかり。ちょい使いするには厳格すぎる。
あまりハードルを下げるとMS専門鯖管にスキルが付いてLinuxに行っちゃうからじゃね?

606 名前:login:Penguin mailto:sage [2010/02/28(日) 11:13:46 ID:ZpjvZrys]
指定したディレクトリ以下を再帰的に検索して
同じディレクトリに大文字小文字違いでファイル名が重複して存在してた場合
例)
ABC.txt
abc.txt
abc.TXT
どれか一つ(どれでもいい)を残してあと消去するってのをやりたいけどどうやんの



607 名前:login:Penguin mailto:sage [2010/02/28(日) 11:15:22 ID:wBfYi/JJ]
>>603 見たら、ハードル高くしたらむしろ出来る奴こそLinuxに行ってしまいそうにオモタ

608 名前:login:Penguin mailto:sage [2010/02/28(日) 11:57:18 ID:C3UADE41]
>>606
perl か何かで書いた方が楽じゃないかな。

609 名前:login:Penguin [2010/02/28(日) 11:58:42 ID:qTqfFliX]
>>606
$ find /tmp/hoge* -type f
/tmp/hoge1/ABC.txt
/tmp/hoge1/abc.TXT
/tmp/hoge1/abc.txt
/tmp/hoge1/a b c.txT
/tmp/hoge1/a b c.txt
/tmp/hoge2/ABC.TXT
/tmp/hoge2/ABC.txt
/tmp/hoge2/DEF.txt
$ find /tmp -type f | uniq -i -d -D --all-repeated=prepend | perl -00 -a -F'\n' -ne '{foreach $i (1..$#F){print "$F[$i]\n";}}'
/tmp/hoge1/abc.TXT
/tmp/hoge1/abc.txt
/tmp/hoge1/a b c.txt
/tmp/hoge2/ABC.txt
ディレクトリの大文字小文字違いは考えてない。

610 名前:login:Penguin mailto:sage [2010/02/28(日) 14:28:15 ID:oz3AO1O4]
>>609
それって答になってるの?
ただ表示させてるだけじゃん。
表示させるだけならもっと楽な方法あるし。

$ ls -R
.:
ABC.txt Aca.TXT abc.Txt sample.sh test2

./test2:
ABC.txt Aca.TXT abc.Txt test3

./test2/test3:
DDD.TXT aBc.tXt
$ find ./* -type f | grep -i 'abc.txt'
./ABC.txt
./abc.Txt
./test2/abc.Txt
./test2/ABC.txt
./test2/test3/aBc.tXt
$ find ./* -type f | grep -i 'abc.txt' | uniq -i
./ABC.txt
./test2/abc.Txt
./test2/test3/aBc.tXt




611 名前:login:Penguin [2010/02/28(日) 14:46:18 ID:qTqfFliX]
>>609 では、重複を探して、最初のを除いて、2つめ以降を出力してる。
この出方を>>606の評価基準で見てもらい、不満なければ、
あと xargs rm につなぐ程度で済むべ。
>>610 の例だと、それは全部消していいものなの?

612 名前:login:Penguin [2010/02/28(日) 14:52:31 ID:qTqfFliX]
もちろん>>609が最適解だなんて思ってないんだけど、
>>610 のやり方だと、abc.txt って人が与えてるよね。何百個かある時はどうするの?


613 名前:login:Penguin [2010/02/28(日) 15:10:05 ID:qTqfFliX]
ちょっと修正する。
$ find /tmp -type f | sort -f | uniq -i -d --all-repeated=prepend | perl -00 -a -F'\n' -ne '{shift @F; print join("\0",(@F,""));}' | xargs -0 ls -l
大丈夫そうなら最後の ls -l を rm に変更で。

614 名前:login:Penguin mailto:sage [2010/02/28(日) 15:41:09 ID:oz3AO1O4]
A=""
find . -type f | sort -f \
| while read F;
do
P=`echo "$F" | tr '[A-Z]' '[a-z]'`
Q=`echo "$A" | tr '[A-Z]' '[a-z]'`
if [ "$P" == "$Q" ]
then
echo "${F}を削除"
# eval rm "$F"
fi
A="$F"
done

615 名前:login:Penguin mailto:sage [2010/02/28(日) 15:47:27 ID:oz3AO1O4]
すまん、evalはなくても動く。

616 名前:login:Penguin mailto:sage [2010/02/28(日) 15:59:45 ID:0w7cauqm]
>>606 が良ければなんでもいいでしょうに



617 名前:login:Penguin [2010/02/28(日) 16:00:23 ID:diBS8T6m]
>>614
いかにもシェルスクリプトらしい解決法だね
perl使うほうがメンドイ

618 名前:login:Penguin [2010/02/28(日) 16:32:44 ID:qTqfFliX]
感心しました。なるほど、うまいですね。
僭越ながら少し手を入れてみました。(sh 対応、外部コマンド実行回数減らす)
#!/bin/sh
A=""
Q=""
find . -type f | sort -f \
| while read F; do
P=`echo "$F" | tr '[:upper:]' '[:lower:]'`
if [ "$P" = "$Q" ]; then
echo "${F}を削除"
# rm "$F"
fi
A="$F"
Q="$P"
done

619 名前:login:Penguin mailto:sage [2010/02/28(日) 19:19:20 ID:ZpjvZrys]
勉強になります

620 名前:login:Penguin mailto:sage [2010/02/28(日) 19:46:12 ID:v9A/VFIk]
別ディレクトリになった時 Q="" しなくていいの?

621 名前:login:Penguin [2010/02/28(日) 20:01:15 ID:qTqfFliX]
>>620
>>609 で楽するためディレクトリの大文字小文字は考えないことにしたんだけど、
d/abc.txt と D/abc.txt を同一視しちゃってるので、本当ならダメ、なんでしょう。
find . -type d するループを外側につけるか、
ディレクトリ名見る if をつければ直せそう。改修頼みます >>620

622 名前:login:Penguin mailto:sage [2010/02/28(日) 20:11:12 ID:0w7cauqm]
だからそういうのは>>606が決めることだって。勉強になります、じゃなかろうに

623 名前:login:Penguin mailto:sage [2010/02/28(日) 20:50:11 ID:v9A/VFIk]
#!/bin/sh
A="."
find ./dir -type f | sort -f | \
while read F; do
P=`dirname $F`/`basename $F | tr '[A-Z]' '[a-z]'`
Q=`dirname $A`/`basename $A | tr '[A-Z]' '[a-z]'`
if [ $P = $Q ]; then
echo "rm $F"
fi
A=$F
done

624 名前:login:Penguin mailto:sage [2010/02/28(日) 22:25:55 ID:v9A/VFIk]
書き直したので貼り直しますね。

#!/bin/sh
B="!"
find . -type f | sort -f | \
while read F; do
 T="`dirname $F`/`basename $F | tr '[A-Z]' '[a-z]'`"
 if [ $T = $B ]; then
  echo "rm $F"
 fi
 B=$T
done

625 名前:login:Penguin mailto:sage [2010/02/28(日) 22:43:51 ID:oz3AO1O4]
>>624
スペースを含むディレクトリ作って実行してみ。

626 名前:login:Penguin mailto:sage [2010/02/28(日) 23:06:54 ID:v9A/VFIk]
Windowsじゃあるまいし。



627 名前:login:Penguin mailto:sage [2010/02/28(日) 23:09:17 ID:Z6hm/tn2]
空白や日本語を許すかで世代間のギャップが存在するなw

628 名前:login:Penguin mailto:sage [2010/02/28(日) 23:11:07 ID:0w7cauqm]
用件的にsamba絡みと予想してたけどね。知らんけど






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<221KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef