読者です 読者をやめる 読者になる 読者になる

min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

bash awk テレビ録画した動画ファイルの容量がGB超のものだけを一覧化してサイズ合計を表示する

 

録画した地デジ動画ファイルが溜まっているので、容量の大きい(GB超のもの)を取り出してブルーレイに焼きたい。動画はこんな感じ。

$ ls -shal | grep NHK.*ts.*mp4

f:id:min117:20161224232459p:plain

サイズ(第1列)がギガバイト(G)のものだけにする。

$ ls -shal | grep NHK.*ts.*mp4 | awk '{ if ($1 ~ /G/) print $1,$10}'

f:id:min117:20161224232846p:plain

awk は形で覚える。

ls -shal | grep NHK.*ts.*mp4 | awk '{ if ($1 ~ /G/) print $1,$10}'

このへん参照した。

The GNU Awk User's Guide - 正規表現

ーーー

1列目だけを合計したい。「1.4G」だとGの字が邪魔で合計できない。数値(1.4)にしたいawk区切り文字をGにしちゃえばいい。

ls -shal | grep NHK.*ts.*mp4 | awk '{ if ($1 ~ /G/) print $1,$10}' | awk -FG '{print $1}'

f:id:min117:20161224235511p:plain

よし。これで数値になった。あとはこれを合計する。awkは少数でも合計できるようだ。

$ ls -shal | grep NHK.*ts.*mp4 | awk '{ if($1 ~ /G/) print $1,$10}' |  awk -FG '{print $1}' | awk '{a+=$1} END{print a}'

f:id:min117:20161224235708p:plain

合計56.2GBと出た。念のため検算してみる。pythonで地道に手で叩くか。

f:id:min117:20161224235755p:plain

確かに 56.2GB のようだ。これは便利。

ーーー

各行と合計行をわかりやすく表示するようにした。

$ ls -shal | grep NHK.*ts.*mp4 | awk '{ if($1 ~ /G/) print $1,$10}' |  awk -FG '{print $1}' | awk '{a+=$1; print $1} END{print "------\n" a}'

f:id:min117:20161225003124p:plain

このへん参照。

d.hatena.ne.jp

共通テーマ: 実例でわかる awk: 第 1 回

ーーー

容量がGB超のファイルについて、サイズとファイル名を出力する。

 ls -shal  | grep NHK_ | awk '{print $1,$10}' | awk '{if($1 ~ /G/) print $1,$2}'

f:id:min117:20161225004451p:plain

バッククオートに食わせて、for文に流し込んでみる。

$ for i in `ls -shal  | grep NHK_ | awk '{print $1,$10}' | awk '{if($1 ~ /G/) print $1,$2}'`; do echo "$i"; done

f:id:min117:20161225004646p:plain

ファイル名だけあればいい。

for i in `ls -shal  | grep NHK_ | awk '{print $1,$10}' | awk '{if($1 ~ /G/) print $1,$2}'`; do echo "$i" | grep mp4; done

f:id:min117:20161225004847p:plain

あ。for文に食わせる必要ないや。awk のときに ファイル名だけ出せばいいのか。

ls -shal  | grep NHK_ | awk '{print $1,$10}' | awk '{if($1 ~ /G/) print $2}'

f:id:min117:20161225005105p:plain

これをファイルにいったん落とす。確認の意味も含めて。

f:id:min117:20161225005226p:plain

専用のフォルダを作る。

$ mkdir OVER_GB/

f:id:min117:20161225005319p:plain

for文で移動する。

$ for i in `cat over_GB_files.txt`; do echo "$i"; mv "$i" OVER_GB/; done

f:id:min117:20161225005433p:plain

iMac上からも確認。あとはこれをブルーレイに焼くだけ。

f:id:min117:20161225005612p:plain