多くの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 -czvf
find で見つかった結果に対して行われます。
tar -czvf <output-tar-name> <input-folder-name>
c
tarの作成に使用z
gz圧縮の場合v
詳しくはf
ファイル用
したがって、基本的に find 2 つの結果が得られます:20180501
と20180502
。次に、{}
2つのアーカイブtarファイルを渡して作成します20180501.tar.gz
。20180502.tar.gz