- PR -

cシェル上で(さきほどcとしか入れませんでした。)

投稿者投稿内容
やすけ
ベテラン
会議室デビュー日: 2003/08/20
投稿数: 87
投稿日時: 2005-11-24 18:24
cシェル上であるディレクトリにある、オラクルのエクスポートファイル名を取得して、それをechoで一覧のように表示したいのですが
そんなことが可能なのでしょうか?
lsした結果をリダイレクションでファイルに落とせるまで出来たのですが
cd /export/home/
ls -al *dmp > export.log
export.logの中身
-rw-r--r-- 1 A staff 4057088 11月 24日 16:24 exp_051124.dmp
-rw-r--r-- 1 A staff 4057088 11月 24日 16:25 exp_051124.dmp
-rw-r--r-- 1 A staff 4057088 11月 24日 16:31 exp_051124.dmp
それ以降がわかりません。
それとも、もっと別の方法があるのでしょうか?
どなたか、ご教授いただければ幸いです。
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2005-11-24 18:34
引用:

-rw-r--r-- 1 A staff 4057088 11月 24日 16:24 exp_051124.dmp
-rw-r--r-- 1 A staff 4057088 11月 24日 16:25 exp_051124.dmp
-rw-r--r-- 1 A staff 4057088 11月 24日 16:31 exp_051124.dmp


この内容を出力したいだけなら、
コード:
ls -al *dmp > export.log 


でexport.logに出してる結果そのものなんだから、
コード:
ls -al *dmp


で標準出力に出るわけだし、
コード:
cat export.log


でexport.logの内容を標準出力に出せるわけだけど、
そういう話じゃないんですか?

そういうごく一般的なところでつまづいてるのか、
読み取りきれないもっと高度なところでつまづいてるのか、よく分からない。

_________________
Mattun
Microsoft MVP for Directory Services
(Oct 2006-Sep 2007)
やすけ
ベテラン
会議室デビュー日: 2003/08/20
投稿数: 87
投稿日時: 2005-11-24 18:48
Mattunさん、早速のレスありがとうございます。
そして質問の内容がわかりづらく申し訳ありません。
要は、あるファイルのファイル名をechoで出力したいのです。
lsで表示した〜.dmpのファイル名です。それがechoで表示させてそのファイル名を
引数にしてoracleのインポートをしたいわけです。
たとえばシェルが対話形式みたいな感じで
1):A.dmp
2):B.dmp
3):C.dmp
という風にechoで表示させ、その番号にあるファイル名(1を選択したらA.dmp)を
引数にしてオラクルのインポート処理をしたいのです。
こんなんでわかっていただけたでしょうか?
武澤
常連さん
会議室デビュー日: 2004/09/27
投稿数: 31
投稿日時: 2005-11-24 20:21
こんなのでヒントになりますか?

コード:
#!/usr/bin/csh
set dmppath = "/export/dmp"
set list = `ls -b $dmppath`
@ i = 1
foreach file($list)
 echo "$i): $file"
 @ i += 1
end
set a = $<
echo $dmppath/$list[$a] <--ここでやりたい処理を!!



エラー処理は考えてちゃんと入れましょうね。
Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 2005-11-24 20:24
標準出力に出す方法は echo だけではありません。

例示された情報(入力プロンプト直前に表示される一覧)を出すだけであれば、おそらく以下のコマンドでよろしいかと存じます。

ls -1 *.dmp | awk 'BEGIN{n=0}{printf("%d):%s\n", ++n, $1);}'

OS が何か明示されていないため、これでは動かないかもしれませんが。

(code タグの中だと $1 という表記が消えてしまうようなので修正)

[ メッセージ編集済み 編集者: Gio 編集日時 2005-11-24 20:28 ]
武澤
常連さん
会議室デビュー日: 2004/09/27
投稿数: 31
投稿日時: 2005-11-24 20:47
あっ、これだとディレクトリもリストに出ちゃいますね。
コード:
#!/usr/bin/csh
set dmppath = "/export/dmp"
set list = `ls -b $dmppath`
set flist = ""
@ i = 0
foreach file($list)
 if ( -f $dmppath/$file ) then
    set flist = ($flist $file)
    @ i += 1
    echo "$i): $file"
 endif
end
set a = $<
echo $dmppath/$flist[$a] <--ここでやりたい処理を!!

コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2005-11-24 21:23
コード:
set i=`expr 0`
foreach args (*.dmp)
    echo $i $args
    set i=`expr $i + 1`
end

angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-11-24 22:56
こんばんは。
引用:
lsで表示した〜.dmpのファイル名です。それがechoで表示させてそのファイル名を
引数にしてoracleのインポートをしたいわけです。
たとえばシェルが対話形式みたいな感じで
1):A.dmp
2):B.dmp
3):C.dmp
という風にechoで表示させ、その番号にあるファイル名(1を選択したらA.dmp)を
引数にしてオラクルのインポート処理をしたいのです。


csh に拘る必要がないなら( と言いますか、私はアンチcsh派なので )、bash の select 構文を使うと楽だと思いますが、如何でしょう。

 select TARGET in *.dmp; do $TARGETを使ったコマンド; break; done

例:
$ select TARGET in *.dmp; do echo $TARGET; break; done
1) aaa.dmp
2) bbb.dmp
3) ccc.dmp
#?
1
aaa.dmp

※斜体部分が select による選択肢出力、太字部分がユーザからの入力

以上、ご参考まで。

スキルアップ/キャリアアップ(JOB@IT)