■最近、仕事でMacに触ってます。
Mac OS X 10.5.2 "Leopard" です。
OS Xっていうのは、FreeBSDをベースに開発してあるらしく、なんだかLinuxっぽいです。
どうでもいいですが、「Macおしゃれだよね!欲しい~♪」…とかいうスイーツな方。
やめたほうがいいです(ぁ
軽く使っただけですが、Windowsとの相違点で気になったのは、、
①全体的に動作が「モッサリ」している。
②ソフトのアンインストールが不便。
マウスの動作や、ウインドウの表示なんかが、かなり微妙な感じ。
設定をいじればいいのかもしれませんが、それにしても動作がモッサリしすぎな感じでした。
ついでに、Unix系列ってことで、システムに関わるようなソフトをインストールすると、
排除するのも大変…。
なれてれば大丈夫とか、アンタが下手なだけだろ!
とか、、、マカーの方々からはいろいろ意見はあるのでしょうが、、、
Windowsに慣れてる人には使いにくいだろう、というのが結論です(´・ω・`)
■―――まぁ本題に。
今回、とある事情で、“ファイルのパーミッションのみをコピーする”必要が出てきまして。
ファイルAのパーミッションを、ファイルBに移す。
この際、ファイルAとファイルBはまったく別のファイルです。
これらをシェルスクリプトで書くことになったんですが……
…ファイルのパーミッションのみをコピーするコマンドなんてない…((;゜Д゜))
いえ、あるにはあるんです。
chmod --reference=FilaA FileB
という書式で、ファイル間のパーミッションコピーは可能らしいのですが。
………Leopardのシェルは対応してNEEEEEEE\(^o^)/
搭載してるシェルのバージョンなんかで、コマンドの仕様なんかも違うのがUnix系の宿命。
■Perlで書いてみる。
仕方がないので、その機能だけ、Perlで書くことにしました。
Perl…今まで書いたこと無いです(´・ω・`)
CpPermisson.pl
----------------------------------------
#!/usr/bin/perl
$temp = (stat argv[0])[2];
# chmod用のパーミッションは"4ケタ"で指定するので、先頭に0をつける。
$perm = 0.substr( sprintf("%o",$temp), -3);
chmod( oct $perm, argv[1] );
----------------------------------------
うろ覚えで書いたので、細部が違ってるかもしれませんが、まぁこんな感じ。
①stat命令で得られる配列の、「三番目」の値。
②①で得られたパーミッションの値を、8進数に変換した、下3桁がパーミッション。
③②でsprintfを利用して生成したパーミッションは「文字列」。
そして、chmodでは文字列を指定できないので、"oct"で明示的に8進数として指定。
<実行>
---------------------------------------
perl CpPermission.pl A.txt B.txt
---------------------------------------
A.txtのパーミッションを、B.txtにコピーする。
…とりあえずは、こんな感じで。
今すぐ、Macのシェルは、一発でパーミッションをコピーするコマンドをサポートするべきだ。
(´・ω・`)
- 2008/07/24(木) 20:41|
- ShellScript|
-
TrackBack: |
-
Comment:3