週にどのくらいのファイルが作成されたかを確認するには?状況:システムが正常に実行されている場合、システムは毎週4つのファイルを生成します。たとえば、
A_08-07-2015.csv
B_08-07-2015.csv
C_08-07-2015.csv
D_08-07-2015.csv
A_01-07-2015.csv
B_01-07-2015.csv
C_01-07-2015.csv
D_01-07-2015.csv
A_24-06-2015.csv
B_24-06-2015.csv
C_24-06-2015.csv
D_24-06-2015.csv
⋮
それでは、システムが正常に動作していることを確認するために、システムが毎週この4つのファイルを生成することを確認するシェルスクリプトを作成したいと思います。しかし、どのように書くのかわかりません...
答え1
$ ls
A_01-07-2015.csv B_01-07-2015.csv C_01-07-2015.csv D_01-07-2015.csv
A_08-07-2015.csv B_08-07-2015.csv C_08-07-2015.csv D_08-07-2015.csv
A_24-06-2015.csv B_24-06-2015.csv C_24-06-2015.csv D_24-06-2015.csv
$ ls | awk -F'[^0-9]' '{ print $5$4$3 }' | sort | uniq -c
4 20150624
4 20150701
4 20150708
$ rm B_08-07-2015.csv
$ ls | awk -F'[^0-9]' '{ print $5$4$3 }' | sort | uniq -c
4 20150624
4 20150701
3 20150708
これにより、4つのファイルがない日付を簡単に見つけることができます。
最初のコメントへの回答:
$ touch {A,B_B,banana,popaye}_{01-07,08-07,24-06}-2015.lol.csv
$ ls
A_01-07-2015.lol.csv banana_01-07-2015.lol.csv B_B_01-07-2015.lol.csv popaye_01-07-2015.lol.csv
A_08-07-2015.lol.csv banana_08-07-2015.lol.csv B_B_08-07-2015.lol.csv popaye_08-07-2015.lol.csv
A_24-06-2015.lol.csv banana_24-06-2015.lol.csv B_B_24-06-2015.lol.csv popaye_24-06-2015.lol.csv
$ ls | awk -F'[^0-9]+' '{ print $4$3$2 }' | sort | uniq -c
4 20150624
4 20150701
4 20150708
$ rm B_B_08-07-2015.lol.csv
$ ls | awk -F'[^0-9]+' '{ print $4$3$2 }' | sort | uniq -c
4 20150624
4 20150701
3 20150708
このバージョンでは、数値以外のすべての文字列をフィールド区切り文字として受け入れるため、日付の前のプレフィックスにも数字が含まれていると失敗します。
答え2
Unix / Linuxファイルシステムでは、ファイル属性には通常作成時間フィールドは含まれません(たとえば、VFATおよびNTFSにあります)。
したがって、ファイル名の日付パターンに依存できない場合は、前のファイル名のリストを維持し、先週のリストを今週のリストと比較する必要があります。
どちらの方法も、先週存在していたファイルが途中で削除され、再生成されたことを保証しません。状況を制限しなくなると、どのファイルが作成されたかを確認できません。