パスワードを忘れた? アカウント作成
6776604 journal
日記

tuneoの日記: filefragの出力がどうもイケてない件 5

日記 by tuneo

ファイルサーバの中の共有ディレクトリの中の「ひどく断片化しているファイル」に限ってdefrag(btrfs filesystem defragとかxfs_fsrとか)を実行したいと思った。

ファイルがいくつのエクステントに分かれているかはfilefragでわかるんだからfind /home/tuneo -type f -exec filefrag "{}" \;でディレクトリ全体をナメた出力をsortに渡せばいいんでないかい?とお気楽に考え始めたのだが(↓の出力例は適当にでっちあげています)。

/home/tuneo/Music/CLANNAD/The Magical Ring/Theme from Harry's Game.flac: 12 extents found

みたいな具合にペロッと出力されてくるエクステント数をどう始末したものか頭を抱えている始末。ファイル名とエクステント数の区切り文字が:なんだけど、これは変更不能なんだよな。:はfilefragに渡されるファイル名の中にも含まれ得るのにそりゃないぜ!

……俺の乏しいあいてー技術で解決策を考えてみた。

Pythonおよび類似のスクリプト言語を使えば簡単だ。ファイル名の中に:が含まれていても右からfilename, extents = ':'.rsplit(line)で分割してint(re.sub(extents,r'[^0-9]*',''))で数値にすれば問題ない。あとはstdoutに垂れ流してsortに渡すもよし、(ファイル名, エクステント数)というタプルのリストを作ってsort()するなり、リスト内包で断片化がしきい値を越えてるファイルだけピックアップするもよし……めんどくさいけど。

さらに脱線。「そういえばfind -print0をPythonスクリプトに食わせる綺麗な方法ってあるのかな?」とふと思って調べてみたが、どうも無いっぽいなぁ。

この議論は、tuneo (2938)によって ログインユーザだけとして作成されたが、今となっては 新たにコメントを付けることはできません。
typodupeerror

日本発のオープンソースソフトウェアは42件 -- ある官僚

読み込み中...