7日前にzipディレクトリを圧縮する方法

7日前にzipディレクトリを圧縮する方法

多くのXMLファイルが格納されているフォルダがあり、フォルダ名は「yyyymmdd」形式です(例:20180515)。そのようなフォルダが7日間大きくなると、圧縮できるスクリプトが必要です。実際のパス:/test/xml_files/yyyymmdd/*.xml。

答え1

ディレクトリの日付形式が与えられたら、単純なシェルスクリプトを使用して締め切りを計算し、関連するすべてのディレクトリを繰り返すことで、締め切りより早い(より少ない)かどうかを尋ねることができます。

#!/bin/sh

cutoff=$(date -d "7 days ago"  +%Y%m%d)
for d in [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
do
  if [ $d -lt $cutoff ] && [ ! -f "${d}".zip ]
  then
    zip -r "$d" "$d"
  fi
done

唯一の要件は、任意の日付を計算できる日付ユーティリティ(たとえば、GNUのユーティリティ)です。

スクリプトは期限より古いため、そのzipファイルがまだ存在していないディレクトリのみを圧縮しようとします。必要に応じてgzipを置き換えることができます。条件をtar調整してください。-f

答え2

私は与えられたパスに日付名を持つディレクトリだけがあるとします。また、変更日や作成日ではなく、ディレクトリ名と日付を比較する必要があります。

パスワード

offset_date=$(date -d "-7 day" +%s) ; for i in $(ls -1) ; do if [ $(date -d $i +%s ) -gt $offset_date ] ; then echo $i ; fi  ; done | xargs tar -czf directories.tar

説明:ここでは、offset_date変数に7日以上のepoch日付を保存し、それをepochに変換してディレクトリ名と比較しています。

答え3

これを達成するには、findコマンドを使用できます。

find  /test/xml_files/ -type d -ctime +7 -exec tar -czvf {}.tar.gz {} \;
  • find /test/xml_files/test/xml_files検索したい場所です。
  • -type d:ディレクトリ(ファイル形式)を見つけるだけです。
  • -ctime +7:7日以上修正された事項のみを考慮
  • -exec tar -czvf {}.tar.gz {} \;: デフォルトではtar -czvffind で見つかった結果に対して行われます。
tar -czvf <output-tar-name> <input-folder-name>
  • ctarの作成に使用
  • zgz圧縮の場合
  • v詳しくは
  • fファイル用

したがって、基本的に find 2 つの結果が得られます:2018050120180502。次に、{}2つのアーカイブtarファイルを渡して作成します20180501.tar.gz20180502.tar.gz

関連情報