毎月最後のファイルを除くすべてのファイルを削除する

毎月最後のファイルを除くすべてのファイルを削除する

ファイル名の一部としてタイムスタンプを含むMySQLバックアップファイルを含むディレクトリを考えてみましょう。

-rw-rw-r-- 1 ubuntu ubuntu 35856184 Nov 16 16:00 db_2013-11-16_1600.sql
-rw-rw-r-- 1 ubuntu ubuntu 35856915 Nov 16 17:00 db_2013-11-16_1700.sql
-rw-rw-r-- 1 ubuntu ubuntu 35857565 Nov 16 18:00 db_2013-11-16_1800.sql
-rw-rw-r-- 1 ubuntu ubuntu 35858254 Nov 16 19:00 db_2013-11-16_1900.sql
-rw-rw-r-- 1 ubuntu ubuntu 35860276 Nov 16 20:00 db_2013-11-16_2000.sql
-rw-rw-r-- 1 ubuntu ubuntu 35861583 Nov 16 21:00 db_2013-11-16_2100.sql
-rw-rw-r-- 1 ubuntu ubuntu 35863630 Nov 16 22:00 db_2013-11-16_2200.sql
-rw-rw-r-- 1 ubuntu ubuntu 35864868 Nov 16 23:00 db_2013-11-16_2300.sql
-rw-rw-r-- 1 ubuntu ubuntu 35866095 Nov 17 00:00 db_2013-11-17_0000.sql
-rw-rw-r-- 1 ubuntu ubuntu 35887731 Nov 17 01:00 db_2013-11-17_0100.sql
-rw-rw-r-- 1 ubuntu ubuntu 35888871 Nov 17 02:00 db_2013-11-17_0200.sql
-rw-rw-r-- 1 ubuntu ubuntu 35888871 Nov 17 03:00 db_2013-11-17_0300.sql
-rw-rw-r-- 1 ubuntu ubuntu 35889319 Nov 17 04:00 db_2013-11-17_0400.sql

実際に2012年9月に始まりました!毎月最後のバックアップを除くすべてのバックアップを削除する必要があります。つまり、次のファイルを保存する必要があります。

db_2012-09-30_2300.sql
db_2012-10-31_2300.sql
db_2012-11-30_2300.sql
db_2012-12-31_2300.sql
db_2013-01-31_2300.sql
db_2013-02-28_2300.sql
db_2013-03-31_2300.sql
db_2013-04-30_2300.sql
db_2013-05-30_2300.sql
db_2013-06-30_2300.sql
db_2013-07-31_2300.sql
db_2013-08-31_2300.sql
db_2013-09-30_2300.sql
db_2013-10-31_2300.sql
db_2013-11-20_0700.sql # Because this month has not finished yet!

Bash / Pythonスクリプトを作成して毎月リストを作成し、リストから最後のエントリを削除してから、残りのファイルを1つずつ削除できます。あるいは、スクリプトが毎月最後のファイルを一時ディレクトリに移動し、すべての内容を削除してからファイルを再配置することもできます。

しかし、その月の最後のファイルを無視するように単純に指示rm(またはfindandawkとrmを使用)する方法があるかどうか疑問に思います。sortそんな魔法があるのでしょうか?

貯めることができれば人生がより楽になるということに気づきました。最初のファイル毎月開始(データ保存時点から1時間間隔)最後毎月のファイル)しかし、組織の他の人は、これが本質的に同じ保護を提供することを知らないので、これを受け入れることはできません。

ベストアンサー1

zzファイルにファイル名のリストが含まれている場合は機能しますので、cat zzを置き換えてください。

cat zz | grep -vF -f <(cat zz|sort -r|uniq -w11)

たとえば、echo *.sql | grep -vF -f <( echo *.sql | sort -r | uniq -w11 ) |

実際には、ファイル名にスペースが含まれていると機能しないため、ファイル名の長さは非常に弱いです。

おすすめ記事