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/
3 名前:名無しさん@お腹いっぱい。 [2008/02/11(月) 19:23:16 ] □初心者向けリンク 「誰にでも」シリーズ ttp://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/publications/dareUni/ /bin/shプログラミング入門 ttp://freebooks.info.nara-k.ac.jp/archive/ShellProgramming/ シェルを使おう - 導入からプログラミングまで - ttp://www.netfort.gr.jp/~tomokuni/lms/shell/text/ □入門者向け書籍: プロフェショナルシェルプログラミング www.amazon.co.jp/exec/obidos/ASIN/4756116329/ 入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界 www.amazon.co.jp/exec/obidos/ASIN/4797321946/ UNIXシェルプログラミング徹底解説 www.amazon.co.jp/exec/obidos/ASIN/4822280489/ 入門Kornシェル www.amazon.co.jp/exec/obidos/ASIN/4873110149/ 入門bash www.amazon.co.jp/exec/obidos/ASIN/4900900788/ □参考リンク: UNIXの部屋 (沢山のコマンドの簡単な紹介など) x68000.q-e-d.net/~68user/unix/ POSIX: Shell & Utilities (標準規格) www.opengroup.org/onlinepubs/009695399/utilities/contents.html
4 名前:名無しさん@お腹いっぱい。 [2008/02/11(月) 19:23:40 ] □最近のシェルスクリプト本(1) (2004/03) UNIXシェルスクリプトハンドブック 関根 達夫 (著) amazon.co.jp/o/ASIN/4797326522/ (2004/10) UNIXシェルスクリプト逆引き大全333の極意 中橋 一朗 (著) amazon.co.jp/o/ASIN/4798008842/ (2004/11) 仕事に使えるLinuxシェルスクリプト 千葉 真人 (著) amazon.co.jp/o/ASIN/4822282090/ (2004/12) UNIXシェルスクリプトサンプルブック デイブ・テイラー (著) amazon.co.jp/o/ASIN/4797327286/ (2005/02) シェルスクリプト基本リファレンス 山森 丈範 (著) amazon.co.jp/o/ASIN/4774122610/ (2005/04) LinuxWorldスクリプト 月刊リナックス・ワールド総集編 月刊LinuxWorld特別 (著) amazon.co.jp/o/ASIN/4872802349/ (2005/05) UNIXシェルスクリプトコマンドブック 山下 哲典 (著) amazon.co.jp/o/ASIN/4797330635/ (2005/05) わかる&使える UNIX基礎講座 シェルスクリプト編 中井 獏 (著) amazon.co.jp/o/ASIN/4774123625/
5 名前:名無しさん@お腹いっぱい。 [2008/02/11(月) 19:24:05 ] □最近のシェルスクリプト本(2) (2005/07) UNIX シェルスクリプト辞典 川井 義治 (著) amazon.co.jp/o/ASIN/4798109231/ (2005/08) シェルスクリプト ポケットリファレンス bash編 宮原 徹 (著), 川原 龍人 (著) www.amazon.co.jp/o/ASIN/4774124818/ (2005/12) 図解でわかるLinuxシェルスクリプト・正規表現 小泉 修 (著) www.amazon.co.jp/o/ASIN/4534040067/ (2006/01)詳解 シェルスクリプト アーノルド ロビンス (著), ネルソン・H.F. ベーブ(著), Arnold Robbins (原著), Nelson H.F. Beebe (原著), 日向 あおい (翻訳) www.amazon.co.jp/o/ASIN/4873112672/ (2007/3) Linuxシェルスクリプトユーザー便利帳―bash2/bash3対応 伊藤 幸夫 (著), 寒川 陽美 (著) www.amazon.co.jp/o/ASIN/4798015954/
6 名前:名無しさん@お腹いっぱい。 [2008/02/11(月) 19:24:29 ] □関連書籍と関連リンク: FreeBSD Hypertext Man Pages www.freebsd.org/cgi/man.cgi Linux JF (Japanese FAQ) Project. www.linux.or.jp/JF/ Unix Programming Frequently Asked Questions 日本語訳 www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_toc.html UNIXプログラミング環境 www.amazon.co.jp/exec/obidos/ASIN/4871483517/ □人間初心者へのお願い: ・このスレはシェルスクリプトについてのスレです。 シェルの対話的な利用についての話やスクリプトと関係ないコマンドの 使い方の質問などはスレ違いなので無用に願います。 □シェルスクリプトでよく使うコマンド: 制御・条件判定系: [,test,expr,true,false,yes,getopts テキスト処理系: cat,awk,sed,tr,sort,uniq,grep,wc,head,tail,cut,paste,comm,join ファイル検索系: find,xargs (スペースなどを含むファイル名を正しく処理するため、 findは -print0、xargsは -0オプションを常に付けることを推奨 ただし、Solarisでは未対応。どうするんだろ?) ディレクトリ系: basename,dirname 出力系: echo,printf 対話コマンド制御系: expect http/ftpの処理自動化: wget,curl
7 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/11(月) 19:32:22 ] このへんも追加か? □最近のシェルスクリプト本(3) (2007/10) UNIX/Linuxシェルスクリプトマスタリングハンドブック 野川 准子 www.amazon.co.jp/o/ASIN/4798017957/ (2007/9) ゲームで極める シェルスクリプトスーパーテクニック 山森 丈範 www.amazon.co.jp/o/ASIN/4774132020/
8 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/11(月) 19:40:21 ] シェルにはAシェル系、Bシェル系、Cシェル系、と種類があるようですが、 僕のPCのシェルはXtermというものみたいです。 これは、シェル系に当てはめると何シェル系なんでしょうか?
9 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/11(月) 19:43:19 ] >>8 X系。 のターミナルエミュレータ
10 名前:名無しさん@お腹いっぱい。 [2008/02/11(月) 19:47:36 ] >>8 むずかしい質問ですね Xtermを含めた操作環境という意味ではグラフィカルシェルと言えるのではないでしょうか
11 名前:名無しさん@お腹いっぱい。 [2008/02/11(月) 20:26:04 ] >>9 そういや昔、東京大学出版会だかの「ワークステーション入門(だったかな?)」で、まじに「X窓系」って言葉に出会ったときはかなり脱力したなぁ。 そしてそれ以上の脱力感にみまわれたのが「窓管理人」。 思い起こせばいい本だったのかもしれん。 スレ痴ですまん。
12 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/11(月) 20:45:55 ] 算譜(Program)はまだ分かるが、連糸(String)は勘弁して欲しいと思ったハタチの夏。
13 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/11(月) 20:47:50 ] >>12 あれで勉強するんじゃなくて、英語勉強して原書嫁。
14 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/11(月) 20:53:54 ] 連糸って書かれるとthreadかと思うな
15 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/11(月) 20:58:40 ] リリアンだよ
16 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/11(月) 21:01:24 ] >>14 当時はスレッドという概念は多分なかったから・・・
17 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/11(月) 21:22:23 ] 連系と言われると連文節変換でしょ。
18 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/11(月) 21:28:40 ] しむらー、糸、糸。
19 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/12(火) 11:01:33 ] おしえてください。 1,2,3,4 .. 100 のような数字を 0001,0002,0003,0004 .. 0100 という風に 正規化したいと思っています。 シェルスクリプトで行うにはどんな方法が有るのでしょうか。 具体的には、引数で渡された番号に従って、 0000.sh 〜 0300.sh のようなシェルスクリプトを実行する スクリプトを作りたいと思っています。
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/