Article View: fj.lang.perl
Article #133Re: mkdirの -p オプション相当を実現するには?
From: Kazuhiko Nanmei
Date: Tue, 21 Apr 1998 00:00
Date: Tue, 21 Apr 1998 00:00
99 lines
4250 bytes
4250 bytes
なんめい@東芝です。
大田@名古屋大学 さん
東 さん
稲葉 浩人 さん
入内島 健 さん
回答有難う御座いました。
(以下、読みづらいかもしれませんが・・・)
In article <6fvo5c$jd9@ux37.fuchu.toshiba.co.jp>, kazuhiko.nammei@toshiba.co.jp says...
>
>実際使うコマンドは、mkdirでは無く、他の外部コマンドなんですが・・・
>また、そのコマンドが、-pの様なオプションを実装してくれていなんで
>困ったしだいです。
というのが、真意です。
質問の内容が伝わらずに、スミマセンでした。
In article <38zphzq03h.fsf@gaea.ssel.toshiba.co.jp>, ken@gaea.ssel.toshiba.co.jp says...
>
>>>>>> inaba@st.rim.or.jp (Inaba Hiroto) (="稲") さん
>>>>>> <yaxo1aai.fsf@carnival.st.rim.or.jp> で
>>>>>> 3 Apr 1998 01:02:49 +0900 に言われるには:
>
> nammei> mkdirの-pオプション相当を実現したいのですが、どんなふうに
> nammei> 書けば良いんでしょうか?
>...
>> @d = split m'/';
>
>> for (@d) {
>> mkdir $_
>> unless -d $_;
>> chdir $_;
>> }
>
> 稲> この考え方でいいと思いますが、ちょっとだけ別のやりかたをしてみました。
>
>私のやり方は基本に忠実ではあったと思いますが、
>
> 稲> #/usr/local/bin/perl -w
> 稲> for (@ARGV) {
> 稲> while (m:/|$:g) {
> 稲> mkdir $`, 0777 or die "Can't mkdir $`: $!\n" if $` ne "" and !-d $`;
> 稲> }
> 稲> }
>
>また、目から鱗が落ちました。稲葉さんのコードを見ていると、自分にとって
>はまだまだ perl が外国語なのを思い知ります。
>
>m//g を list context で使えば split は使わずに済んでしまうんですね。し
>かも、$` を使えばいちいち chdir する必要がない、と。
>--
う~ん。(?_?)
私には???(解釈できません)です。(T_T)
修行が足りなくて、ごめんなさいm(__)mです。
健さん のなら、何とか解る気がしますが、
実際にしたい事は、mkdirじゃなくて、他の外部コマンドなので、
system()で実行するとしたら・・・、
そうそう、ディレクトリが既存であるかを確認するのにも、lsコマンド相当のもの
を使うしか手立てが無いんです。(test文?が使えない)
●ディレクトリを作るには・・・
system("MKDIR $_ >/dev/null 2>&1") ; #←「MKDIR」は、/bin/mkdirと同様の振る舞い・・・
MKDIRのリターン値によって「0:成功」「それ以外:失敗」。
●ディレクトリが既存か、確認するには・・・
system("LS -d $_ >/dev/null 2>&1") ; # ←「LS」は、/bin/lsと同様の振る舞い・・・
LSのリターン値によって「0:成功(既存)」「それ以外:失敗(存在しない)」。
という具合です。
私なりに書いてみたのが、以下です。
------------------------------------------------------
#! /usr/local/bin/perl
$path = "" ; パスの初期化
# ↓実用適にはARGVを使うのが良いんですが、サンプルという事で・・・
$_ = '/hoge_top/a/b/c' ;
@d = split m'/';
for (@d) {
$path = join("/", $path , $_ );
$path =~ s#/+#/#g ;
system("MKDIR $path >/dev/null 2>&1") if system("LS -d $path >/dev/null 2>&1") ;
}
------------------------------------------------------
エラーなどについて、一切考慮してないことを除けば、
期待した動きをしてくれています。
それも、全て、助言して下さった皆さんのお陰だと感じています。
本当に有難う御座いました。m(__)m
Technical Details
Message-ID:
<6hhk95$fjc@ux37.fuchu.toshiba.co.jp>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<6fvo5c$jd9@ux37.fuchu.toshiba.co.jp> <38vhss3235.fsf@gaea.ssel.toshiba.co.jp> <6g063d$475$1@meshsv66.os.mesh.ad.jp> <yaxo1aai.fsf@carnival.st.rim.or.jp> <38zphzq03h.fsf@gaea.ssel.toshiba.co.jp>Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: 1043e7,35a2f9c0f0c5150f X-Google-Attributes: gid1043e7,public From: kazuhiko.nammei@toshiba.co.jp (Kazuhiko Nanmei) Subject: Re: mkdirの -p オプション相当を実現するには? Date: 1998/04/21 Message-ID: <6hhk95$fjc@ux37.fuchu.toshiba.co.jp> X-Deja-AN: 346249083 References: <6fvo5c$jd9@ux37.fuchu.toshiba.co.jp> <38vhss3235.fsf@gaea.ssel.toshiba.co.jp> <6g063d$475$1@meshsv66.os.mesh.ad.jp> <yaxo1aai.fsf@carnival.st.rim.or.jp> <38zphzq03h.fsf@gaea.ssel.toshiba.co.jp> Content-Type: Text/Plain; charset=ISO-2022-JP Organization: Fuchu Works, TOSHIBA Corp.,Japan Mime-Version: 1.0 Newsgroups: fj.lang.perl