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


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

シェルスクリプト総合 その10



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/

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/

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秒足すとか、
時刻の加減算したいのだけどなんかいい方法ない?








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

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

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