最近、「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 件のコメント:
コメントを投稿