1 名前:名無しさん@お腹いっぱい。 [2008/02/11(月) 19:21:07 ] シェルスクリプトの総合スレです。 スクリプトのお勉強・自慢・腕試しなどにどうぞ。 まずは注意点、リンク、地鎮祭など(>>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 でトレースしましょう。 前スレ シェルスクリプト総合 その9 pc11.2ch.net/test/read.cgi/unix/1187130302/
20 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/12(火) 11:03:11 ] 意味がわからん
21 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/12(火) 11:22:15 ] >>19 ただ…正規化…? シェルスクリプトうんぬんはわからないが printf %04d とか使ったらどうよ?
22 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/12(火) 11:32:17 ] >>19 for arg in "$@" do file=`printf %04d $arg` ./$file.sh done ↑ってことか?
23 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/12(火) 12:15:28 ] >>20-22 いけました!ふつーにprintfが有ったんですね!盲点でした! ありがとうございました!
24 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/12(火) 12:17:24 ] man printf って、やったことないのか…
25 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/12(火) 12:28:00 ] はい・・・ 最悪出来なかったら、Cかperlでprintfだけするプログラムを 作ろうと思ってました。アホですいません・・・
26 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/12(火) 12:40:06 ] printfコマンドが一般的になったのはまだ割りと最近のこと。 Solarisのちょっと前のバージョンとかではprintfコマンドはない。 そういう場合のポータブルな方法としては、exprを使う。 expr 000$arg : '.*\(....\)$' とかね。
27 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/12(火) 12:53:14 ] >>20 もありがたかったのか?w
28 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/12(火) 23:54:32 ] サーバのバックアップが 20080212 20080211 20080210 20080209 20080208 ・ ・ ・ というディレクトリにあるのですが、今はfindとrmを使って60日以上経ったディレクトリ を find ディレクトリ -type d -mtime +60 -maxdepth 1 -exec rm -Rtv "{}" \; として、60日以上経ったディレクトリを消しているのですが、HDDの容量が 厳しくなってきたので、 残すディレクトリを 1日前 2日前 3日前 1週間前の1日 2週間前の1日 3週間前の1日 ・ ・ ・ 2ヶ月前の1日 として、それ以外のディレクトリを消したいと考えています。 どのようにしたらいいでしょうか?
29 名前:名無しさん@お腹いっぱい。 [2008/02/13(水) 00:01:03 ] 8日前のを消してしまったら、2週間前の1日は残せないと思うのだが、、、
30 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:08:10 ] えーと、直近3日とかは毎日残したいのですが、それ以前のものは一週間のうち 何曜日でもいいから1日だけバックアップを残したいという意味です。
31 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:09:35 ] うむ。 毎日3日前〜1週間前までのを消してたら、すぐに全部消える罠。 頭使え
32 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:25:58 ] >>30 3(4か?)日後には、その日残すべきモノが前日までの処理で消えている状態になるんだぞ。
33 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:29:28 ] 言葉は悪いが>>31 が良いレス。
34 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:34:21 ] >>28 週一回別な場所にもバックアップとるとか。 4日前のを消すスクリプトを日曜以外毎日動かすとか。
35 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:43:41 ] 消す条件を (一週間以上前 and not 日曜日) or 二ヶ月以上前 これシェルスクリプト関係ある?
36 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:46:31 ] すみません。やっと皆さんの言ってる意味がわかりました。 毎日動かすとか、そういうのを気にしないで常に>>30 の状態になってれば いいんですが、なんかいい方法ないですか? スクリプトは毎週一回動かして、直近一週間は残すけどそれ以前は1週間に 1日だけ残すとかでもいいんです。
37 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:48:05 ] >>35 は理解できない?
38 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:48:13 ] >>35 ああ、それでいいんですけどシェルスクリプトで書く方法がわかりません… もう、他のスクリプト言語でも使ってしまえばいいんですが、サーバにあまり いらないものインストールもしたくないので。
39 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:48:13 ] すいません、env TZ=GMT-15 `date +%b%d` としても、2月12日とでてしまうのですが…。 日付を Feb 12 と出したいので…orz
40 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:49:42 ] >>39 env LC_ALL=C TZ=GMT-15 date +%b%d
41 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:50:15 ] シェルスクリプトであるディレクトリの下のディレクトリひとつひとつに対して 作成日時 or 曜日を判断できて、rmを実行できれば解決です。
42 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:51:15 ] >>38 スクリプト一発でなんとかするんじゃなく >>34 じゃだめなん?
43 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:55:34 ] >40 ありがとうございます。 今までcsh使ってて、混乱していました…orz
44 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 00:56:42 ] >>42 > 4日前のを消すスクリプトを日曜以外毎日動かすとか。 を見逃してました これでいいですw ありがとうございました。
45 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 01:05:06 ] GNU dateがあれば、 dir=20080213 s=`date --date=$dir '+%s'` nows=`date '+%s'` diff=`expr "$nows" - "$s"` w=`date --date=$dir '+w'` if [ "$w" -eq 0 -and "$diff" -gt 604800 ]; then # 60*60*24*7 remove; elif [ "$diff" -gt 36288000 ]; then # 60*60*24*7*30*2 remove fi なければ、perlで同様のコードを。
46 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 01:06:52 ] "$w" -ne 0 でした。
47 名前:39-43 mailto:sage [2008/02/13(水) 01:26:33 ] さらにすいません…。 env LC_ALL=C TZ=GMT-15 date '+%b %e' で望みどおりでたんですが、これをAAAに入れて検索条件にしたいんですが、 AAA=`env LC_ALL=C TZ=GMT-15 date '+%b %e'` としても昨日にならなくて困っています。。。
48 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/13(水) 01:29:20 ] GNU dateがあれば、 date --date=yesterday なければ、perlで同様のコードを。
49 名前:47 mailto:sage [2008/02/13(水) 01:39:46 ] >48 ありがとうございます。やっぱりそうですか…。
50 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 06:22:53 ] 初心者ですみませんが質問させてください。 aaa bbb と書いてあるa.txtをtrコマンドでxxxに置換して保存したいのですが tr 'aaa\nbbb' 'xxx' < a.txt を実行すると画面に表示されてa.txtに保存できません。 しかもxxxxxxxxと表示されている・・・ どうやってうまい具合にa.txtに保存できますでしょうか?
51 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 07:05:45 ] >>50 そもそも trコマンドを勘違いしてる。 それだと、aaa改行bbbという並びに関係なく、 aまたはbまたは改行がすべて xに変換される。 例えばファイル内容が abab改行 だったとしても xxxxx に変換される。 同じファイルに出力する方法はまた次の段階で。
52 名前:50 mailto:sage [2008/02/19(火) 07:16:41 ] >>51 なるほど。 trでもsedでもいいのですが aaa bbb を xxx に変換したいのです。 うーん。何でどうやったらいいのだろう。。
53 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 07:29:35 ] >>50 ほれ、考えてやったぞ。 (rm a.txt; sed 'N; s/aaa\nbbb/xxx/; P; D' > a.txt) < a.txt
54 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 18:05:08 ] chmod で ディレクトリは0755、ファイルは0644に 簡単にする方法教えてくださいませ
55 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 18:09:23 ] findでがんばれ
56 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 18:23:48 ] >>54 もともとディレクトリが700、通常ファイルが600になっているなら、 トップディレクトリで chmod -R go+u-w . で一発。
57 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 20:28:04 ] 単にこういうことしたいみたいな質問はくだ質にいって欲しいなあ。 英作文スレで単語を質問してるようなもんだ。
58 名前:名無しさん@お腹いっぱい。 [2008/02/19(火) 23:13:05 ] >>53 もっと簡単に出きるとオモ >>54 umask
59 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 23:14:22 ] >>53 どうも。LINUX環境ですが実行しても空のファイルが作られるだけでした。 もう1度質問させてください。 複数行の文字列をsedで置換できるようなのですがやり方がわかりません。 マニュアル見ましたがNオプションとやらでできるみたいなのですが 初心者なので理解に苦しんでます。どうやったらできますか・・・
60 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 23:19:19 ] >>58 あふぉちゃう? umaskではすでに存在するファイルのパーミッションは変わらない。
61 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 23:22:33 ] >>59 はい、Linuxなら板違い。 ちなみに UNIXだと >>53 でちゃんと動作するよ。
62 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/19(火) 23:30:40 ] >>59 >>53 が書いているコマンドラインを1字1句そのままコピペして実行したか? Linuxでも >>53 でちゃんと動作したよ。 rm a.txt の部分とか、( ) で囲んでるところとかが重要なんだけど、 自分で勝手に解釈して rm a.txtを省略したりしてないかな? rm a.txtを省略すると同じファイルに上書きされるので 空のファイルができる現象が起こるはず。 あと、環境限定になるが、sed -i を使えば、( )の中で rm するトリックは不要になる。
63 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/20(水) 05:44:43 ] >>62 どうも。がんばってみます。 てかLINUXは板違いなの? テンプレにLINUXもいいようなこと書いてあったのですが板違いなら失礼しました。
64 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/20(水) 09:54:16 ] > てかLINUXは板違いなの? 板違いでは無いと思うけど、unixのシェルスクリプトスレよりも Linuxの初心者質問スレに行った方が良いんじゃない?
65 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/20(水) 12:35:24 ] >>61 はアホだから放置で。
66 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/22(金) 16:26:31 ] うーん、UNIXの授業という授業でLinuxを動かしてるんですけど、 この場合どちらで聴いたらいいですか? 来週までにレポート出さないと単位がやばいのです
67 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/22(金) 16:31:41 ] >>66 宿題禁止なのでどっちも駄目。単位落して再履修が本人のため。
68 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/22(金) 16:32:23 ] シェルスクリプトはここで聞けばいいよ。 けど宿題は自分でやりなよ。
69 名前:名無しさん@お腹いっぱい。 [2008/02/22(金) 19:04:37 ] バッシュで使えてボーンで使えないシェル記法を10個挙げるとすると 何になりますか? 端的に解答をお願いします。
70 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/22(金) 19:42:40 ] >>69 エクレアみたいな名前のコマンドが使えませんでした。
71 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/22(金) 19:43:30 ] Appendix B Major Differences From The Bourne Shell www.gnu.org/software/bash/manual/bashref.html#Major-Differences-From-The-Bourne-Shell
72 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/22(金) 20:01:34 ] >>70 10個、具体的にお願いします。 >>71 日本語でお願いします。 あ、来週月曜までにお願いします。
73 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/22(金) 20:08:40 ] >>72 エクレア?みたいな名前のコマンドが使えませんでした。
74 名前:名無しさん@お腹いっぱい。 [2008/02/22(金) 21:16:55 ] rsh で、リモート側の戻り値 $? を取得することは可能でしょうか?
75 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/22(金) 21:20:21 ] >>74 不可能。sshなら可能。
76 名前:名無しさん@お腹いっぱい。 [2008/02/23(土) 16:28:51 ] あるディレクトリ中でファイルのタイムスタンプの新しい順にls表示するには ls -lt でできますが、 これを、あるディレクトリ以下のサブディレクトリを全部含めて、かつ、 どのディレクトリにあるかに関係無しにタイムスタンプの新しい順にls表示するには どうしたらいいでしょう? ls -ltR では、ディレクトリごとにしかソートされません。 なるべく簡単な方法(コマンドラインにすぐ打てる程度)を希望します。
77 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 16:38:18 ] そういうのはくだ質へ行ってください。
78 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 16:40:07 ] >>77 くだ質へ行ったところでお前答えられるのかよw
79 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:04:11 ] ls -lR | sort では駄目なの? sort条件の設定がめんどくさそうだけど。
80 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:18:23 ] >>79 はい、だめです。
81 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:20:44 ] >>80 それじゃ他の板行って。ここはスクリプトの板であって、コマンドの板ではないから。
82 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:24:19 ] >>81 そのコマンドをシェルスクリプト中に書きます。
83 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:27:08 ] >>82 >>6
84 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:32:50 ] まずはコマンドとして実行してみて確認するためと、 今後とも定石として覚えやすいように、なるべく簡単な方法を聞いたまでです。 目的はシェルスクリプトに書くことです。コマンドの使い方の質問ではありません。 では、よく知っている方、解答をどうぞ、 ↓
85 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:39:21 ] 手当たり次第man
86 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:41:00 ] お前アホだろ。 perl scriptで、 mtimeのepochTime ファイル名 と出力させてsort -nr
87 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:42:59 ] 屁理屈だけは一人前だな。 しかし、お前の屁理屈を受け入れる必要は全然無い。 残念だなあ、くだ質でなら答えてやったのに。
88 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:44:11 ] lsとコマンド組み合わせで行けそうだし、 >なるべく簡単な方法(コマンドラインにすぐ打てる程度)を希望します。 これはaliasか、これ用のシェルスクリプト書けば行けるけど、 考えれば考えるほど>>77 が正しく思えるようになってきたw
89 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:44:21 ] >>86 perlを使わずにお願いします。
90 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:46:29 ] PATTERNS="*.jpg *.gif" のような、globパタンを空白で区切って並べた 変数が与えられたとして、 ディレクトリ $dir に存在するファイルでこれにマッチするものを 処理するにはどう書くのがいい? cd $dir; for f in $PATTERNS だと、$dirにcdできないといけないのがちょっといやかな、と。
91 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:49:41 ] >>90 cd || exit って感じでcdできなかったら例外処理するようにしたら?
92 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:50:42 ] ふつー cd $dir&& for f in $PATTERNS
93 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:54:28 ] そういうことを言ってるんじゃなくて、 cdをしたくないんじゃないのかな?
94 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:55:37 ] ああ、確かにw ではちょっと訂正させていただいて。 cd "$dir" && for f in $PATTERNS だと$dirにcdできないといけないけど、ディレクトリにrパーミッションが 出ていてxが出ていない場合も処理できる書き方ができたらいいなと。
95 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 17:55:43 ] じゃあfindとか
96 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 18:06:34 ] >>93 そういう意味です >>95 ちょっと思いつかなかった。有望かも。 でもfindの-nameはパタン一つしかとれない。 echo "$PATTERNS"|sed -E 's/^[[:space:]]*// s/[[:space:]]*$// s/[[:space:]]+/ -name /g s/^/-name /' ぐらいでいいのかな?
97 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 18:06:35 ] >>84 find . -print0 | xargs -0 stat -t %s の出力をどうにかすればいいんじゃない?
98 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 18:11:55 ] >>94 xないとパターン展開できないんだけど? (direcotry listing属性) rのみで問題ないのは既にパスが分かっているときだけ。 だからx立っているの前提で、 FILES=`(cd $dir; echo $PATTERNS)'`
99 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 18:16:26 ] 逆だろ。rがないとリスティング出来ない。 ただxがないとアクセスできないから意味ないんじゃね? >>94 かなり特殊なケースでリスティングだけ出きればいいのかも知れないが。
100 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 18:39:23 ] xなくてもrが有ればパターン展開は出来る。 ループ内でset +xしてるのがダサいな。 set -f for f in $(for p in $pat; do set +f; [ "$(echo ${dir}/${p})" = "${dir}/${p}" ] || echo ${dir}/${p};done); do basename "${f}";done
101 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/23(土) 18:50:53 ] パターンがglobパターンじゃない場合に見つけられなかった。 set -f for f in $(for p in $pat; do set +f; [ "$(echo ${dir}/${p}*)" = "${dir}/${p}*" ] || echo ${dir}/${p};done); do basename "${f}";done
102 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/24(日) 07:19:02 ] >>96 find . \( -name '*.[ch]' -or -name '*.asm' \) ... とかできないか?
103 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/29(金) 15:55:20 ] 犬糞厨はこっちへ シェルスクリプト総合@LINUX Part3 pc11.2ch.net/test/read.cgi/linux/1184077033/
104 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/01(土) 23:48:31 ] ●質問 /hoge/ 以下にあるディレクトリ群の中身のファイルリストを フルパス形式で各ディレクトリ毎に作りたいです。 ●自分なりに調べた結果 findコマンドを使うとフルパスで結果が返ってくる事がわかりました。 こうしました。 $find /hoge -name "*.txt" > hoge.list ですがこれだと全てのディレクトリの.txtまでのパスが書かれてしまいますので これを各ディレクトリ毎に作りたいんです。そしてそれを~/listに保存したいです。 手作業でもいいのですがOSに不慣れなうえディレクトリが120ほどあり困っています お力お借り出来ませんでしょうか?よろしくおねがいします。 丸投げするつもりはないです 知恵を貸してほしいです。
105 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/01(土) 23:52:48 ] ls -Rオススメ
106 名前:104 mailto:sage [2008/03/02(日) 00:14:25 ] >>105 ありがとうございます。 すみません自分の説明が下手でした・・ $cat a_list /hoge/a/hoge1.txt /hoge/a/hoge2.txt $cat b_list /hoge/b/hage.txt /hoge/b/hage.txt 伝わりますでしょうか・・。
107 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/02(日) 00:50:58 ] こんなんかな find . -depth 1 -type d | while read dir do ls -lR $dir > ./tmp/${dir}_list done
108 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/02(日) 00:53:54 ] あ、出力がフルパスじゃないや。 まぁ、なんかこんな感じでできそうな希ガス。
109 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/02(日) 00:58:29 ] find . -depth 1 -type d | while read dir do find /path/to/hoge/ > ~/list${dir}_list done こんなんか。3連カキコすんまそん。
110 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/02(日) 01:33:33 ] サブディレクトリもあるのかとか、 *.txt 以外のファイルもあるのかあれば表示してもいいのかとか、 ちと条件不足
111 名前:104 mailto:sage [2008/03/02(日) 01:41:01 ] ありがとうございます。 >>109 /path/to/hoge/を書き換えしmkdir ~/listしたうえで実行してみました。 以下のようになります。 find: パスは評価式の前におかなければならない Usage: find [-H] [-L] [-P] [path...] [expression] >>110 条件ですか・・。 サブディレクトリはないです。*.txt以外表示はしたくないです。 *.txt以外のファイルも混在しています。
112 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/02(日) 01:59:50 ] find の行にほかに何か書いたんじゃ? find /path/to/hoge -name "*.txt" > ~/list${dir}_list かなぁ。 find /path/to/hoge/ てすると結果が /path/to/hoge//dir になるぽい。 ちょっと今Macしか手元にないのでちょっと挙動が違うかもね。 俺もあんまり詳しくないんでw
113 名前:104 mailto:sage [2008/03/02(日) 02:28:31 ] >>112 何も書いてないですね。自分に出来るかわからないですけど教えてもらったのを 参考に弄ってみたいと思います。 Macもコマンド使えるんですかー 知りませんでしたw ありがとうございました。一旦、スレを離れます。
114 名前:名無しさん@お腹いっぱい。 [2008/03/05(水) 00:49:41 ] HOGE=20080302022831 たとえば2008年3月2日 2時28分31秒を意味する みたいな環境変数あったとして、 これに180秒足すとか、 時刻の加減算したいのだけどなんかいい方法ない?
115 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/05(水) 01:14:43 ] date -j -f %s $(($(date -j -f %Y%m%d%H%M%S "$HOGE" +%s) + 180)) +%Y%m%d%H%M%S みたいな?OSというかdateによるけど。
116 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/05(水) 04:26:24 ] UNIX epochは素晴らしい。 64bitにした時signedにしてないシステムがあるのは嘆かわしい。
117 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/05(水) 14:50:47 ] dateコマンドはシステムによって違いすぎるから、ほとんどの日付計算はperlに丸投げ
118 名前:名無しさん@お腹いっぱい。 [2008/03/06(木) 13:08:35 ] ある テキストファイルに"aaa"という文字列が入っていたら[処理A]を テキストファイルに"bbb"という文字列が入っていたら[処理B]を ってシェルスクリプトだけでできるかな? bashで。
119 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 13:19:01 ] bashは知らんがshで case $(cat x.txt) in *aaa*) echo 'do A';; *bbb*) echo 'do B';; esac
120 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/06(木) 13:23:09 ] 両方入っていたら?