最近、「python shell」でpythonの練習をしていると、ちょっと複雑なスクリプトをチューニングしようとすると、Aquamacsで.pyとして書き出し、terminalで動作確認する方が楽である事に気がついた。
慣れるにつれて、bashもpythonもターミナルから見ればスクリプトである事を実感して来た。数値処理は、若い頃にFortranやHP-BASICなどを使っていた事も在り、bashでやるよりはpythonの方が使い易い事にも気がついた。
そんな折り、「Time machine」によるバックアップに並行して、ディレクトリごとのバックアップ(rsync)をしたいと思うようになった。ついては以前、iMac間で、データの転送する時に、「du -h -d 1」をして、印刷用紙上で、転送の有無と、サイズの確認をしたものの見辛かったのを思い出した。
今回は、このコマンドをサイズの大きい順にソートして、「-h」に近い形式で見易くする事を考えた。大部分は下記の参考書を見ると、bashでできる;
まず、bashスクリプト本体は;
ここで、「pythonスクリプトの呼び出し」は第42行目の;
です。
そのpythonスクリプト「myBlock2Byte.py」は;
です。
このスクリプトで自分のホーム・ディレクトリのディレクトリ容量を出した結果は;
サイズの項にでている「129.61 GB」 と一致します。それぞれ小さい場合も完全に一致しています。今後、気楽にバックアップを検討する事ができそうです。
慣れてしまえば、完全にpythonスクリプトで処理する方が楽そうである。いよいよ、Calcのマクロをpythonで作る事も可能な気がして来た。
ーーーー このポストの履歴
慣れるにつれて、bashもpythonもターミナルから見ればスクリプトである事を実感して来た。数値処理は、若い頃にFortranやHP-BASICなどを使っていた事も在り、bashでやるよりはpythonの方が使い易い事にも気がついた。
そんな折り、「Time machine」によるバックアップに並行して、ディレクトリごとのバックアップ(rsync)をしたいと思うようになった。ついては以前、iMac間で、データの転送する時に、「du -h -d 1」をして、印刷用紙上で、転送の有無と、サイズの確認をしたものの見辛かったのを思い出した。
今回は、このコマンドをサイズの大きい順にソートして、「-h」に近い形式で見易くする事を考えた。大部分は下記の参考書を見ると、bashでできる;
- UNIXシェルスクリプト 逆引き大全 333の極意
- 中橋 一郎・著
- 秀和システム、2009-08.
- ISBN-10: 4-7980-0884-2
まず、bashスクリプト本体は;
u1@div-mm:~/bin$ cat myDU #!/bin/bash # Finderで、ディレクトリ右クリックで「情報」を見るのは面倒だ。そこで # 現在のディレクトリ中の全てのディレクトリのサイズを求め、 # ブロックの順にソートし、 # バイト単位(kB=1000B, MB=1000kB, GB=1000MB)で表示する。 # 2012-04-08 (日) 15:44 by mNeji/irt # on Lion/10.7.3 at Mac mini(mid 2011) # 参考: 「UNIXシェルスクリプト 逆引き大全 333極意」 # 中橋 一郎 著 # 秀和システム、2009-08 # ISBN-10:4-7980-0886-2 # 参考箇所:unix333, (p223, Tips#194), (p112, Tips#084) # 説明の表示 echo "+ Script($0) at `myDate` start +++++" echo "+ action: 'du -d 1 | sort -gr' for dir:'`pwd`' " printf '+ Size \t\t Directory Name ----------------------\n' # 現在のディレクトリと直下のディレクトリのサイズを求め、ブロックの順にソートする du -d 1 |sort -gr > temp_du # unix333, (p223, Tips#194): ファイルを行に分割 IFS=$'\n' #改行区切り file=(`cat temp_du`) #fileはアレイ構造 rm -f temp_du # 中間ファイルを削除 # アレイの第一列にあるブロック数を適切なバイト数に変換して、 # 表として再度、表示する。 for line in "${file[@]}";do # unix333, (p112, Tips#084): 1行をタブで分割 IFS=$'\t' #タブ区切り set -- $line #$1はブロック数(512Byte) , $2は相対ディレクトリ #ブロック数からkByte, MByte, GByteへの変換には、 #「Python script: myBlock2Byte.py」を作成して、用いた。 ByteSize=`myBlock2Byte.py "$1"` # 行表示 printf '%s\t %s\n' "$ByteSize" "'$2'" done echo "+ Script($0) at `myDate` stop +++++" u1@div-mm:~/bin$
ここで、「pythonスクリプトの呼び出し」は第42行目の;
- ByteSize=`myBlock2Byte.py "$1"`
です。
そのpythonスクリプト「myBlock2Byte.py」は;
u1@div-mm:~/bin$ cat myBlock2Byte.py #! /usr/bin/python # coding: utf-8 # usage: $ myBloch2Byte.py block_number # The parameter, block_number indicates in the unit of 1block = 512Byte # input: Size in the unit of Block # output: Size in the unit of kB, MG, GB # 2012-04-06 by mNeji # Python/2.7.1 on Lion/10.7.2 at Mac mini(mid 2011) # 引数の受け入れ import sys myArg= sys.argv # ブロック数を整数型に変換し、 blockSize=int(myArg[1]) # module math import math # バイト数に変換 byteSize=math.floor(blockSize*512) # 1block = 512Byte kSize=byteSize/1000. # 1kB = 1000Byte for Lion/10.7.3 MSize=kSize/1000. # 1MB = 1000kB for Lion/10.7.3 GSize=MSize/1000. # 1GB = 1000MB for Lion/10.7.3 # 使用サイズの補助単位選択 if GSize >= 1.: print '%7.2f%s' % (GSize,"GB") elif MSize >= 1.: print '%6.1f%s' % (MSize,"MB") else: print '%5.0f%s\t' % (kSize,"kB") u1@div-mm:~/bin$
です。
このスクリプトで自分のホーム・ディレクトリのディレクトリ容量を出した結果は;
u1@div-mm:~$ myDU + Script(/Users/u1/bin/myDU) at 2012-04-09(月)14:02:28 start +++++ + action: 'du -d 1 | sort -gr' for dir:'/Users/u1' + Size Directory Name ---------------------- 129.61GB '.' 64.22GB './Library' 57.51GB './Music' 5.76GB './VirtualBox VMs' 714.6MB './Sites' 564.1MB './Documents' 465.9MB './Pictures' 143.2MB './myLocal' 111.6MB './Kabe-Gamis' 88.3MB './tmp' 11.5MB './bin' 8.3MB './backup' 4.6MB './.npm' 2.9MB './.gem' 1.4MB './myBash' 1.3MB './RRwork' 1.1MB './solarized' 569kB './Public' 172kB './.zsh.d' 164kB './DLしたプログラム資料' 66kB './function' 53kB './zsh_back0' 20kB './.ssh' 16kB './mytest' 16kB './Downloads' 16kB './Desktop' 4kB './.pip' 4kB './.idlerc' 4kB './.cups' 0kB './NTT_PR-S300SE' 0kB './Movies' 0kB './.emacs.d' 0kB './.bundler' 0kB './.Trash' + Script(/Users/u1/bin/myDU) at 2012-04-09(月)14:02:30 stop +++++ u1@div-mm:~$です。なお、上記の容量値を、Finderで該当するディレクトリを右クリックして情報を見てみますと;
サイズの項にでている「129.61 GB」 と一致します。それぞれ小さい場合も完全に一致しています。今後、気楽にバックアップを検討する事ができそうです。
慣れてしまえば、完全にpythonスクリプトで処理する方が楽そうである。いよいよ、Calcのマクロをpythonで作る事も可能な気がして来た。
ーーーー このポストの履歴
- 開始 2012-04-09 (月) 13:53
0 件のコメント:
コメントを投稿