min117の日記

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

awkで「サイズが0バイトのファイル」だけ抜き出して削除する

このサイトを参考に。

qiita.com

理屈も大事だけど、とにかくカタチを覚えちゃって、そっから使っていくのがLLだと思う。

awkだと、こんな感じで覚えた。

$ ls -al | awk ''

$ ls -al | awk '{}'

$ ls -al | awk '{print}'

$ ls -al | awk '{print $0}' ←ls -al と同じ

$ ls -al | awk '{print $1}' ←ls -al の1列目だけ表示

$ ls -al | awk '{print $9}' ←ls -al の9列目だけ表示

$ ls -al | awk '{print $1,$9}' ←ls -al の1列目と9列目だけ表示

 

$ ls -al | awk '$ {}'

$ ls -al | awk '$ {print}'

$ ls -al | awk '$ {print $1}'

$ ls -al | awk '$5 {print $1}'

$ ls -al | awk '$5== {print $1}'

$ ls -al | awk '$5==0 {print $1}5列目がゼロだったら、1列目だけ表示

$ ls -al | awk '$5==0 {print $1,$9}5列目がゼロだったら、1列目と9列目だけ表示

 

実際やってみる。

こういうフォルダがあったとして

 1列目 ファイルパーミッション

 5列目 ファイルサイズ

 9列目 ファイル名

f:id:min117:20151103182129p:plain

1列目だけ表示。

$ ls -al | awk '{print $1}'

f:id:min117:20151103182159p:plain

9列目だけ表示。

$ ls -al | awk '{print $9}'

f:id:min117:20151103182225p:plain

 

こっからが本題。

ファイルサイズがゼロの場合 の処理。

**が**だったら、という条件文を、awkでどうやるか という話。

 

5列目(ファイルサイズ)がゼロだったら、1列目だけ表示

$ ls -al | awk '$5==0 {print $1}'

f:id:min117:20151103183312p:plain

5列目(ファイルサイズ)がゼロだったら、1列目と9列目だけ表示

$ ls -al | awk '$5==0 {print $1,$9}

f:id:min117:20151103183424p:plain

5列目(ファイルサイズ)がゼロだったら、1列目と5列目と9列目だけ表示

$ ls -al | awk '$5==0 {print $1,$5,$9}

f:id:min117:20151103183804p:plain

ファイルサイズがゼロの行だけ取得できた。

ここまでくればコッチのモン。

 

まずはフォルダを除く。

1列目の先頭がdrwで始まっているものを除く。

$ ls -al | egrep -v ^drw.* | awk '$5==0 {print $1,$5,$9}' 

f:id:min117:20151103184129p:plain

ファイルだけになった。

 

ファイル名だけにする。9列目だけあればいい。

$ ls -al | egrep -v ^drw.* | awk '$5==0 {print $9}'

f:id:min117:20151103184253p:plain

 

これを、rm -rfの引数に与えればいい。

`` で囲む。

$ rm -rf `ls -al | egrep -v ^drw.* | awk '$5==0 {print $9}'`

f:id:min117:20151103184822p:plain

見事に、ファイルサイズゼロファイルだけが消えた。

f:id:min117:20151103184842p:plain

変更前はこう

f:id:min117:20151103182129p:plain

※さらに、ファイル名に半角入っていることを考慮して""でも囲んでおいたほうが良かったかもしれない。

$ rm -rf "`ls -al | egrep -v ^drw.* | awk '$5==0 {print $9}'`"

けど、今回はそんなファイル無かったし、良しとする。