シェルスクリプト総合 その6
■ このスレッドは過去ログ倉庫に格納されています
0001うはwwwww
2006/03/26(日) 00:56:22スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashなので特に注意。
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
0496名無しさん@お腹いっぱい。
2006/05/26(金) 20:40:57シェル変数iはローカル変数じゃないよ。
再帰呼び出しした時に iの値を変化させてしまうから、
呼び出し元の iまで狂ってしまう。
0497名無しさん@お腹いっぱい。
2006/05/26(金) 20:41:55find自体は知ってたんですが、まさかこんな使い方があるとは知りませんでした・・・orz
下の様に書き換えることで目的の処理は達成できました
ありがとうございました&お騒がせしました・・・
find . \( -regex ".*\.c" -o -regex ".*\.h" \) -exec //ここに処理 \;
0498名無しさん@お腹いっぱい。
2006/05/26(金) 20:45:38そういうことだったんですか。シェルスクリプトはちょっと齧っただけなので
ついCの感覚で書いてました・・・
元の方も関数先頭で local i とすることでうまく動くようになりました
わざわざありがとうございました
0499名無しさん@お腹いっぱい。
2006/05/26(金) 20:50:03hoge.c っていうディレクトリがあったときに
おかしくなりそうだな。
0500名無しさん@お腹いっぱい。
2006/05/26(金) 21:12:25grepしてるとこelifにすりゃ良くね?
0501名無しさん@お腹いっぱい。
2006/05/26(金) 21:15:16答え言うなよ。
空気嫁。
0502名無しさん@お腹いっぱい。
2006/05/26(金) 21:16:18case "$i" in
*.c|*.h)
ここに処理;;
esac
で桶。
0503名無しさん@お腹いっぱい。
2006/05/27(土) 19:29:580504名無しさん@お腹いっぱい。
2006/05/27(土) 19:34:00スクリプト内で読み込ませ、全行正常に読み込んだか判定したいのですが
. /環境変数定義ファイル
echo $?
環境変数定義ファイルの途中で読み込みエラーが発生しても
最終行が正常ならば、echoは0を返すのですが
読み込みエラーを発見する方法ってありますか。
0505名無しさん@お腹いっぱい。
2006/05/27(土) 20:16:470506名無しさん@お腹いっぱい。
2006/05/28(日) 02:13:45速度重視ならシェルスクリプトはやめといた方がいい。
0507名無しさん@お腹いっぱい。
2006/05/29(月) 04:12:25a) .で始まるファイルは数えられなくてもいーんなら
find . -type d | while read DIR ; do printf "$DIR: %d\n" `find $DIR/* -prune ! -type d | wc -l` ; done
b) それじゃあ困るよという場合は
find . -type d | while read DIR ; do printf "$DIR: %d\n" `ls -aF $DIR | fgrep -v '/' | wc -l ` ; done
iBook(500MHzのG3)で試したら、、、
a)の例
# time find /usr -type d | while read DIR ; do printf "$DIR: %d\n" `find $DIR/* -prune ! -type d | wc -l` ; done
real 1m1.054s
user 0m7.870s
sys 0m42.810s
#
b)の例
# find /usr -type d | while read DIR ; do printf "$DIR: %d\n" `ls -aF $DIR | fgrep -v '/' | wc -l ` ; done
real 1m18.302s
user 0m10.340s
sys 0m53.310s
#
約17秒ほど差がでますた。(当社比約1.3倍)
※うちiBookの/usrはファイル19240コ、ディレクトリ973だぉ
0508名無しさん@お腹いっぱい。
2006/05/29(月) 04:19:57iBookでやってみた感じだと、%SYSの方の比率が大きいくて
wcやfgrepの負荷は%USRの比率が大きいぉ。
とゆーことで、
ファイル名・ディレクトリ名をファイルシステム内でぐるぐる走査する時間に多くが費やされるっぽいぉ。
ならば、シェルスクリプトでも大差ない鴨よ?
lsやfindを上回るCのアプリ書くのも難しいし。
0509sage
2006/05/29(月) 04:53:110510名無しさん@お腹いっぱい。
2006/05/29(月) 09:44:08が速いんじゃないかな。
0511名無しさん@お腹いっぱい。
2006/05/29(月) 09:50:51>>507 >>510 は一応ディレクトリ毎に結果を表示するから、回答になってる。
回答が >>509 でいいんなら、そもそも質問しないだろ。
0512age
2006/05/29(月) 11:08:01#!/bin/sh とか記述する行の事、何て言うんでしたっけ。
人の名前みたいな「○○の行」みたいな名前が付いてたと思うんですが。
0513名無しさん@お腹いっぱい。
2006/05/29(月) 11:19:51これ?
http://www.catb.org/~esr/jargon/html/S/shebang.html
0515名無しさん@お腹いっぱい。
2006/05/29(月) 13:43:51GNU findには-printfなんてのがあるのか・・・ベンリね
GNU find じゃない人は
find . -type f -exec dirname {} \; | sort | uniq -c
と書かないと動かん鴨
# FIFOなんかもファイルの数として数えたければ
# find . ! -type d -exec dirname {} \; | sort | uniq -c
0516名無しさん@お腹いっぱい。
2006/05/29(月) 14:52:01環境設定をapacheのhttpd.confに追加して動かす方法はあるのでしょうか?
いま環境設定はサーバー上で
FILE=data.ini
export FILE
で行っています。
シェルはLinuxのbashです。
0517名無しさん@お腹いっぱい。
2006/05/29(月) 14:56:44くだらねえ質問はここに書き込め! Part 125
http://pc8.2ch.net/test/read.cgi/linux/1147260130/
0518名無しさん@お腹いっぱい。
2006/05/29(月) 15:09:11http://pc8.2ch.net/test/read.cgi/linux/1121994321/l50
0519名無しさん@お腹いっぱい。
2006/05/29(月) 16:57:12SetEnv FILE data.ini
って、アンタそりゃーhttpdの使い方の話だから
シェルスクリプトの話じゃねーべ
0520名無しさん@お腹いっぱい。
2006/05/29(月) 21:09:11例]file_procという自作コマンドを実行してaaaというファイルが更新されたらファイルの最後に時刻を書き込む
1.file_proc1 aaaを実行
2.aaaというファイルが更新されるのを待つ
3.更新されたらそのファイルの最後に時刻を追加
4.file_proc2 aaaを実行
5.aaaというファイルが更新されるのを待つ
6.更新されたらそのファイルの最後に時刻を追加
・
・
・
・
0521名無しさん@お腹いっぱい。
2006/05/29(月) 21:16:150522名無しさん@お腹いっぱい。
2006/05/29(月) 23:01:27よくわからんがこんなんでええんかい?
----
FILE_WATCH=/home/foo/aaa
FILE_PREVIOUS=/tmp/watch.txt
if [ ! -f $FILE_WATCH ]
then
echo "$FILE_WATCH not found."
exit 1
fi
ls -l $FILE_WATCH > $FILE_PREVIOUS
while [ -1 ]
do
LS_CURRENT=`ls -l $FILE_WATCH`
LS_BEFORE=`cat $FILE_PREVIOUS`
if [ x"$LS_CURRENT" != x"$LS_BEFORE" ]
then
# file is updated
date >> $FILE_WATCH
fi
ls -l $FILE_WATCH > $FILE_PREVIOUS
sleep 10
done
----
0523名無しさん@お腹いっぱい。
2006/05/30(火) 00:27:07file_proc1 aaa && date >> aaa
こんなのじゃだめなの?
0524名無しさん@お腹いっぱい。
2006/05/30(火) 23:30:11を実行した結果と一緒にファイルに出力したいのですが
set -x
としても
./abc.sh > aaa.txt
のように実行したときに
aaa.txtに実行した結果しか出力されません。
どうすればコマンドも出力できるようになりますか?
0525名無しさん@お腹いっぱい。
2006/05/30(火) 23:37:57./abc.sh > aaa.txt 2>&1
0526名無しさん@お腹いっぱい。
2006/05/30(火) 23:39:45スクリプトの一行目に、
echo -n $0
とか書いとけばいいんじゃないかと。
0527名無しさん@お腹いっぱい。
2006/05/30(火) 23:42:560528名無しさん@お腹いっぱい。
2006/05/30(火) 23:57:100529名無しさん@お腹いっぱい。
2006/05/30(火) 23:59:55つか、>>525 に答え出てるって。
0530名無しさん@お腹いっぱい。
2006/05/31(水) 00:18:48として数分待ってメールを読む
0531名無しさん@お腹いっぱい。
2006/05/31(水) 08:46:302>&1ってつけると標準エラー出力もファイルに書き込む
0532名無しさん@お腹いっぱい。
2006/05/31(水) 10:57:59c123456 cs012
という文字列がhogehogeというファイルに記述されていた場合、
cs以下の数字3つを切り取り、それを変数numとする
更にその変数numに対して
整数a≦変数num≦整数b
という条件が満たされた場合にその旨を伝える
…というスクリプトを作っているのですが、どうもうまくいきません
if [ $num >= 0 ] ; then
if [ $num <= 61 ] ; then
echo
0533切れてる…orz
2006/05/31(水) 11:01:11if [ $num <= 61 ] ; then
echo "0 <= $num <= 61"
fi
fi
if [ $num >= 62 ] ; then
if [ $num <= 122 ] ; then
echo "62 <= $num <= 122"
fi
fi
と条件を指定したのですが、numの値如何に関わらず全てのecho文が表示されてしまいます
どうすればいいんでしょうか?
0534セル塩いちご
2006/05/31(水) 11:23:27<= を -le に
と直せばいいじゃないかな
0535名無しさん@お腹いっぱい。
2006/05/31(水) 12:01:59削除するヨロシ。
0536名無しさん@お腹いっぱい。
2006/05/31(水) 12:46:42とかの方が見やすそうな希ガス
0537名無しさん@お腹いっぱい。
2006/05/31(水) 12:50:50if ((0 <= num && num <= 61)); then
0538名無しさん@お腹いっぱい。
2006/05/31(水) 13:16:350539名無しさん@お腹いっぱい。
2006/05/31(水) 17:48:580540名無しさん@お腹いっぱい。
2006/05/31(水) 17:53:53罰手異存!
0541名無しさん@お腹いっぱい。
2006/05/31(水) 17:56:480542名無しさん@お腹いっぱい。
2006/05/31(水) 19:00:43知っているのか雷電。
0543名無しさん@お腹いっぱい。
2006/05/31(水) 20:21:14そのようにすると「unary operator expected」と出て弾かれてしまいます…
>>535
分かりました。処理しておきます
>>536,537
すぐには無理ですが、明日にでも試してみます。ありがとうございます
>>538
諸事情によりshでやらなければならないので…残念です
0544名無しさん@お腹いっぱい。
2006/05/31(水) 20:33:26>そのようにすると「unary operator expected」と出て弾かれてしまいます…
だとすると、$numに何も代入されていない(空文字列)の可能性あり。
[ $num >= 62 ] だから、>= はリダイレクトとみなされ、引数ではないので
testコマンドには test $num 62 だけが渡り、$numが空文字列なので、
test 62 となって、これは62という文字列の長さが1以上あるので
常に真になる。
元の質問で常に真になるという現象の説明が付く。
ちなみに、正しく$numに代入されていれば、
[ $num -ge 62 ] で動かないとおかしい。
0545名無しさん@お腹いっぱい。
2006/05/31(水) 21:05:05テキストから読み取って代入ってシェルだと結構難しいよ
awkとかでやってるのか?
0546名無しさん@お腹いっぱい。
2006/05/31(水) 21:27:49えーっとですね…種明かしをすると、大学の課題の一環なんです。
手元にスクリプトファイルがないので、明日また質問させていただきます。
因みにawkは使わず(使い方がよく分からない)、sedで例としてあげたcs012の"012"部分を切り取って使っています。
先生によるとそれが文字列として認識されており、整数に直す処理をしてやればよいのではないか…との事です。
んが、そのやり方が分からずに困ってます…
0547名無しさん@お腹いっぱい。
2006/05/31(水) 21:33:32本当に先生がそう言ったのならその先生は信用しない方がいい。
シェルスクリプトの変数では文字列と整数を区別しない。
(testコマンドでの判定時に演算子によって区別するだけ)
あと、宿題なら回答はこれで打ち切る。
0548名無しさん@お腹いっぱい。
2006/05/31(水) 23:26:11だからそのsedで抜き出してる処理の部分を詳しく
そこが間違ってたらもともこもねえじゃん
012の部分を切り取ってるソースをここに書け
0549名無しさん@お腹いっぱい。
2006/05/31(水) 23:52:480550名無しさん@お腹いっぱい。
2006/06/01(木) 02:15:27ok
へー、これでもエラーでないのか。
知らなかった。
0551546
2006/06/01(木) 14:31:53friend="$HOME/.friendlist"
friend2="$HOME/.friendlist2"
echo "Do you use me?---y/n"
read first
while test x"$first" = xy
do
w | grep -v pts | sort | sed 's/\([^ ]*\) :0\/\([^ ]*\) *[^ ]* *[^ ]* *[^ ]* *[^ ]* *[^ ]*/\1\2/' | cat >>$friend
read first
for i in $first
do
grep "$i" $friend | cat >>$friend2
set tmp=`sed 's/^c[0-9]\{6\} cs\([0-9]\{3\}\)/\1/' $friend2`
num=`$tmp >& /dev/null`
echo "
$i is here.
"
grep "$i" $friend2
echo ""
done
0552名無しさん@お腹いっぱい。
2006/06/01(木) 14:38:24num=`$tmp >& /dev/null`
↑/dev/nullに捨ててどうするw こりゃだめだ。
0553名無しさん@お腹いっぱい。
2006/06/01(木) 14:54:18該当行を削除してif構文を>>537さんの提示してくれた文に書き換えた結果、エラーは吐き出されなくなったものの
if ((0 <= num && num <= 61)) ; then
echo "$i is in \"2nd bld.101A\"."
fi
if ((62 <= num && num <= 122)) ; then
echo "$i is in \"2nd bld.109A\"."
fi
if ((123 <= num && num <= 142)) ; then
echo "$i is in \"20th bld.107\"."
fi
if ((143 <= num && num <= 162)) ; then
echo "$i is in \"20th bld.619\"."
fi
if ((201 <= num && num <= 245)) ; then
echo "$i is in \"20th bld.310\"."
fi
if ((301 <= num && num <= 320)) ; then
echo "$i is in \"20th bld.413\"."
fi
if ((321 <= num && num <= 340)) ; then
echo "$i is in \"20th bld.613\"."
fi
のようにしているのにnumの値に関わらず一番最初の処理しか実行されません…
0554名無しさん@お腹いっぱい。
2006/06/01(木) 15:01:42>該当行を削除して
削除してどうする。/dev/nullに捨てるのだけが余計。その他は必要。
あと、その前の行の set もおかしい。
これ本当にに自分で理解して書いたスクリプトじゃないだろ。
もっとシェルスクリプトの基本からやり直した方がいい。
0555名無しさん@お腹いっぱい。
2006/06/01(木) 15:19:45了解しました。確かに、理解せずに書いた部分がほとんどです。
勉強して出直すことにします。ありがとうございました。
0557名無しさん@お腹いっぱい。
2006/06/02(金) 11:57:20#!/bin/sh -x
----
でいいんじゃないかな
0558名無しさん@お腹いっぱい。
2006/06/02(金) 12:50:400559名無しさん@お腹いっぱい。
2006/06/02(金) 12:54:53perl使っちゃえよ。
0560名無しさん@お腹いっぱい。
2006/06/02(金) 13:03:36探しているんだが全然見つからん…orz
0561名無しさん@お腹いっぱい。
2006/06/02(金) 13:09:14bc使っちゃえよ。
0562名無しさん@お腹いっぱい。
2006/06/02(金) 13:37:19ヒント: head -c; tail -c
>>560
$ printf '%d\n' 0377
255
0563名無しさん@お腹いっぱい。
2006/06/02(金) 13:49:34サンクス。こんなやり方があったのか…
0564名無しさん@お腹いっぱい。
2006/06/02(金) 14:56:10255
$ perl -e 'print 0377,"\n";'
255
$
0565名無しさん@お腹いっぱい。
2006/06/02(金) 23:45:58実行している時に , 標準出力にディスプレイ 風車 ? が回って
いる様にみせるにはどうすればいいでしょうか ?
0566名無しさん@お腹いっぱい。
2006/06/03(土) 02:51:19$ echo '8i377p' | dc
255
0567名無しさん@お腹いっぱい。
2006/06/03(土) 03:10:32ヒントをやるから後は自分でアレンジしな。
for i in a b c
do
echo -en "$i\r"
sleep 1
done
0568名無しさん@お腹いっぱい。
2006/06/03(土) 08:02:28ワンライナー計算ができないのが面倒くさい。
bc -e '1+2'
くらいできてもいいのに。
0569名無しさん@お腹いっぱい。
2006/06/03(土) 08:32:25dcは出来る子。
0570名無しさん@お腹いっぱい。
2006/06/03(土) 11:44:41exprは出来る子。
0571名無しさん@お腹いっぱい。
2006/06/03(土) 12:02:320572名無しさん@お腹いっぱい。
2006/06/03(土) 14:21:54なんでつかわないんだろ。
0573名無しさん@お腹いっぱい。
2006/06/03(土) 14:43:15最近ようやくどの新しいOSにでも入ってる状態になったってことは、
後10年くらいしたらどこで使っても問題ないかなって感じだ。
0574名無しさん@お腹いっぱい。
2006/06/03(土) 17:10:36自分は今Solarisを使っているんだが、 実は2.5.1にはすでに入ってたのね。知らなかった。
0575名無しさん@お腹いっぱい。
2006/06/03(土) 19:13:50ありがとう。
ps で実行したコマンドのプロセスを確認と絡めて
うまい具合に作れました。
0576名無しさん@お腹いっぱい。
2006/06/03(土) 23:48:49#!/bin/sh
echo "$@" | bc
0577名無しさん@お腹いっぱい。
2006/06/03(土) 23:53:140578名無しさん@お腹いっぱい。
2006/06/17(土) 01:14:46finde ./ の結果が
AAA
AAA/BBB
AAA/BBB/hoge1.txt
AAA/BBB/hoge2.txt
AAA/BBB/hoge3.txt
AAA/BBB/CCC/hoge4.txt
AAA/BBB/CCC/DDD
AAA/BBB/CCC/DDD/EEE
AAA/BBB/FFF/GGG/hoge5.txt
AAA/BBB/FFF/GGG/hoge6.txt
AAA/BBB/FFF/GGG/HHH
AAA/BBB/FFF/III/hoge7.txt
AAA/BBB/FFF/III/JJJ
AAA/BBB/FFF/III/JJJ/KKK
AAA/BBB/FFF/III/JJJ/KKK/LLL
AAA/BBB/FFF/III/JJJ/KKK/LLL/MMM
となっていて、ツリーにファイルを持たないフォルダのみを
抜き出したいです。
0579名無しさん@お腹いっぱい。
2006/06/17(土) 01:15:24AAA/BBB/CCC/DDD
AAA/BBB/CCC/DDD/EEE
AAA/BBB/FFF/GGG/HHH
AAA/BBB/FFF/III/JJJ
AAA/BBB/FFF/III/JJJ/KKK
AAA/BBB/FFF/III/JJJ/KKK/LLL
AAA/BBB/FFF/III/JJJ/KKK/LLL/MMM
先輩は、find . -type d -emptyと言い残して旅に出ましたが
動きませんでした…
OSはこれです。シェルがどうこうはよくわかりません。。。
SunOS devcvs01 5.9 Generic_118558-05 sun4u sparc SUNW,UltraAX-i2
0580名無しさん@お腹いっぱい。
2006/06/17(土) 02:56:59実はちゃんと動いている、に1票。
動かしてみたらどうなったか具体的に書いてみ。
あと、次に>>578がここに戻ってくるときまでには、
先輩が教えたオプションの意味をman見て100%理解しとけよ。
0581名無しさん@お腹いっぱい。
2006/06/17(土) 08:52:40先輩はガソリンが空っぽになったので探しながら旅をしてる
まで読んだ
0582578
2006/06/17(土) 08:55:24また、UNIXのコマンドのfindのとこに-emptyオプションがなかったです。
0583名無しさん@お腹いっぱい。
2006/06/17(土) 09:22:500584名無しさん@お腹いっぱい。
2006/06/17(土) 10:25:12AAA/BBB/CCC/DDD/EEE
AAA/BBB/FFF/GGG/HHH
AAA/BBB/FFF/III/JJJ/KKK/LLL/MMM
になるはず。AAA/BBB/CCC/DDD の下に AAA/BBB/CCC/DDD/EEE があるから
-empty でひっかからない。
-type d でひっかかったディレクトリのそれぞれにファイルがあるかどうかを
ひとつずつ地道に調べるしかないんじゃ?
0585名無しさん@お腹いっぱい。
2006/06/17(土) 11:18:240586578
2006/06/17(土) 11:49:13地道に調べてるのですが、いかんせんフォルダが10000くらいあって
そのうちの500フォルダくらいが空のようですが、目視はなんとも精度が低く
>>585
すみません、どんな感じにやるのですか?
0587名無しさん@お腹いっぱい。
2006/06/17(土) 12:06:31find $1 -type f|grep '^$' >/dev/null
みたいなシェルスクリプトを使うのか?
0588名無しさん@お腹いっぱい。
2006/06/17(土) 12:14:16Solarisのfindには、-emptyオプションが無い件については、
↓で代用できる。
find . -type d -links 2
で、サブディレクトリがあって空の場合に、
親ディレクトリは引っかからないという問題はあるけど、
どうせ、その空のディレクトリを消したいんだろ?
なら、末端の空のディレクトリを消して、再び
↑のfindをすることを数回繰り返せば、目的は果たせる。
0589578
2006/06/17(土) 12:18:16一覧をこさえて提出しないと、鬼が怒るという問題があるのです
-emptyないのですか…
0590名無しさん@お腹いっぱい。
2006/06/17(土) 15:12:39use File::Find;
no warnings File::Find;
do {
my %not_empty;
find({'bydepth'=>1, 'no_chdir'=>1,
'wanted'=>sub {
my $dir = $File::Find::dir;
my $name = $File::Find::name;
if (-d $name) {
return if (defined ($deleted{$name}));
if (! defined ($not_empty{$name})) {
$deleted{$name} = 1;
return;
}
}
$not_empty{$dir} = 1;
}},'.');
$old = $new;
$new = length(keys %not_empty);
} while ($old!=$new);
print join("\n",sort keys %deleted) ,"\n";
長過ぎ。シェルスクリプトじゃないし。しかも、この出力をrm -rf できないし。
0591名無しさん@お腹いっぱい。
2006/06/17(土) 15:50:18#!/bin/sh
for x in `find $1 -type d` ; do
find $x -maxdepth 1 -type f | grep . > /dev/null
if [ $? -eq 0 ] ; then
continue
fi
echo $x
done
環境が違うんでgrepの違いとかは適当に直して呉
リンクの有無とかもチェックするなら3-6行を増やせ
>589
結果に責任は持たんから怒られる覚悟はしとけw
0592591
2006/06/17(土) 16:01:10実はあのままだと怒られるパターンがあるが、詳しく書かないでおく。
0593名無しさん@お腹いっぱい。
2006/06/17(土) 17:04:33Solarisの findには -maxdepthオプションがないというのがオチ。
あと、シェル変数を " " してないから、いろいろ危ない。
0594名無しさん@お腹いっぱい。
2006/06/17(土) 17:23:242 find でディレクトリ以外の一覧を得る find . ! -type d > b
3 2 で得られたものから、dirname の一覧を作る
cat b | sed 's,/[^/]*$,,' > c1
cat c1 | sed 's,/[^/]*$,,') > c2
以下、最も深い階層回繰り返し。
4 1 にしか含まれないものを創る cat a c1 c1 c2 c2 ... |sort |uniq -u
0595名無しさん@お腹いっぱい。
2006/06/17(土) 19:13:07それを find から -exec で起動するかな
■ このスレッドは過去ログ倉庫に格納されています