2008年8月30日土曜日

gawkでファイル削除

最近知った技を使う機会が。

$ ls -latr
合計 63636
drwxr-xr-x  2 kaz kaz    32768  3月  1 06:30 cddb_0301_data
drwxr-xr-x  2 kaz kaz    36864  4月  1 05:00 cddb_0401_data
drwxr-xr-x  2 kaz kaz    90112  5月  1 06:30 newage
drwxr-xr-x  2 kaz kaz   106496  5月  1 08:00 soundtrack
drwxr-xr-x  2 kaz kaz    36864  5月  1 08:30 reggae
drwxr-xr-x  2 kaz kaz   131072  5月  1 08:30 blues
drwxr-xr-x  2 kaz kaz   159744  5月  1 09:00 folk
drwxr-xr-x  2 kaz kaz    36864  5月  1 09:00 data
drwxr-xr-x  2 kaz kaz   135168  5月  1 09:00 jazz
drwxr-xr-x  2 kaz kaz   536576  5月  1 09:00 rock
drwxr-xr-x  2 kaz kaz   589824  5月  1 09:00 misc
drwxr-xr-x  2 kaz kaz    69632  5月  1 09:00 country
drwxr-xr-x  2 kaz kaz   225280  5月  1 09:00 classical
drwxrwxr-x  3 kaz kaz     4096  8月 16 17:46 include
drwxrwxr-x  3 kaz kaz     4096  8月 16 17:46 lib
drwxrwxr-x  4 kaz kaz     4096  8月 16 17:47 man
-rw-rw-r--  1 kaz kaz      272  8月 21 00:26 pet.txt
-rw-rw-r--  1 kaz kaz     4894  8月 21 01:20 my-medium.cnf
-rw-r--r--  1 kaz kaz  8255596  8月 28 00:33 freedb-update-20080401-20080501.tar.bz2
-rw-r--r--  1 kaz kaz  8724678  8月 28 00:33 freedb-update-20080301-20080401.tar.bz2
-rw-r--r--  1 kaz kaz  8359595  8月 28 00:33 freedb-update-20080201-20080301.tar.bz2
-rw-rw-r--  1 kaz kaz      152  8月 29 00:42 freedb.awk
-rw-r--r--  1 kaz kaz 37447502  8月 29 00:43 freedb.txt
drwx------ 10 kaz kaz     4096  8月 29 01:39 ..
drwx------  5 kaz kaz     4096  8月 29 07:02 var
drwxr-xr-x  2 kaz kaz     4096  8月 29 07:02 socket
drwxr-xr-x  2 kaz kaz     4096  8月 30 00:34 info
drwxrwxr-x  3 kaz kaz     4096  8月 30 00:34 share
drwxrwxr-x  2 kaz kaz     4096  8月 30 00:34 bin
drwxrwxr-x  2 kaz kaz     4096  8月 30 00:34 libexec
drwxrwxr-x 24 kaz kaz     4096  8月 30 00:34 .

いろいろ合わせて、削除対象を絞りこみ。最後の部分はgawkを使う。

$ find . -maxdepth 1 -type d -mtime +30 | egrep -v '_[0-9]{4}_' | gawk '{ print $0 }'
./country
./misc
./blues
./classical
./rock
./data
./soundtrack
./jazz
./reggae
./newage
./folk

gawkの記述を下のように変更して、実行

gawk '{ printf("rm -rf %s\n", $0) | "sh" }END { close("sh")}

$ find . -maxdepth 1 -type d -mtime +30 | egrep -v '_[0-9]{4}_' | gawk '{ printf("rm -rf %s\n", $0) | "sh" }END { close("sh")}'
無事に削除ができた
合計 61532
drwxr-xr-x  2 kaz kaz    32768  3月  1 06:30 cddb_0301_data
drwxr-xr-x  2 kaz kaz    36864  4月  1 05:00 cddb_0401_data
drwxrwxr-x  3 kaz kaz     4096  8月 16 17:46 include
drwxrwxr-x  3 kaz kaz     4096  8月 16 17:46 lib
drwxrwxr-x  4 kaz kaz     4096  8月 16 17:47 man
-rw-rw-r--  1 kaz kaz      272  8月 21 00:26 pet.txt
-rw-rw-r--  1 kaz kaz     4894  8月 21 01:20 my-medium.cnf
-rw-r--r--  1 kaz kaz  8255596  8月 28 00:33 freedb-update-20080401-20080501.tar.bz2
-rw-r--r--  1 kaz kaz  8724678  8月 28 00:33 freedb-update-20080301-20080401.tar.bz2
-rw-r--r--  1 kaz kaz  8359595  8月 28 00:33 freedb-update-20080201-20080301.tar.bz2
-rw-rw-r--  1 kaz kaz      152  8月 29 00:42 freedb.awk
-rw-r--r--  1 kaz kaz 37447502  8月 29 00:43 freedb.txt
drwx------ 10 kaz kaz     4096  8月 29 01:39 ..
drwx------  5 kaz kaz     4096  8月 29 07:02 var
drwxr-xr-x  2 kaz kaz     4096  8月 29 07:02 socket
drwxr-xr-x  2 kaz kaz     4096  8月 30 00:34 info
drwxrwxr-x  3 kaz kaz     4096  8月 30 00:34 share
drwxrwxr-x  2 kaz kaz     4096  8月 30 00:34 bin
drwxrwxr-x  2 kaz kaz     4096  8月 30 00:34 libexec
drwxrwxr-x 13 kaz kaz     4096  8月 30 01:03 .

参照:GNU Awk ユーザーズガイド: General Introduction(4.6 print や printfの出力のリダイレクト)

0 件のコメント: