私はアップロードフォルダ(サイズがかなり大きい)をバックアップするためにスクリプトファイルを作成するのが好きです。
3月1日
Upload
├── sub01/
│ ├── file-01.jpg (1 mar)
│ ├── file-02.jpg (1 mar)
│ ├── file-03.jpg (1 mar)
│ └── file-04.jpg (1 mar)
├── sub02/
│ ├── file-05.jpg (1 mar)
│ └── file-06.jpg (1 mar)
バックアップ たとえば、毎日zipを作成する方法を知りたいです。最初の日(3月1日など)は大きなzipファイルになり、翌日zipは3月2日にのみ作成/変更され、毎日バックアップを維持します。昼間。
3月2日
Upload
├── sub01/
│ ├── file-01.jpg (1 mar)
│ ├── file-02.jpg (1 mar)
│ ├── file-03.jpg (2 mar)
│ └── file-04.jpg (1 mar)
├── sub02/
│ ├── file-05.jpg (1 mar)
│ └── file-06.jpg (1 mar)
└── sub03/
├── file-07.jpg (2 mar)
├── file-08.jpg (2 mar)
├── file-09.jpg (2 mar)
└── file-01.jpg (2 mar)
02032022.zip
ファイルが含まれます
Upload
├── sub01/
│ └── file-03.jpg (2 mar)
└── sub03/
├── file-07.jpg (2 mar)
├── file-08.jpg (2 mar)
├── file-09.jpg (2 mar)
└── file-01.jpg (2 mar)
cronが圧縮するスクリプトファイルをどのように作成できますか?
答え1
GNU find / awkとbsdtarの使用(libarchive-tools
最新のDebianバージョン用パッケージ)
LC_ALL=C find . -iname '*.jpg' -type f -printf '%p\0%TF\0' |
gawk -v RS='\0' -v ORS='\0' '
{
getline date
print | "bsdtar --format zip --null -T - -cf "date".zip"
}'
その日に最後に変更されたファイルを含む1つのファイルが作成されますYYYY-MM-DD.zip
。jpg
bsdtar
これらのコマンドの多くは並列に実行できます。ファイルが複数の日付で最後に変更された場合、これによりシステムが過負荷になる可能性があります。
前日(現地時間)に最後に変更されたファイルに対してのみzipファイルを生成するには、次のようにします。
LC_ALL=C find . -iname '*.jpg' -daystart -mtime 1 -print0 |
bsdtar --format zip --null -T - -cf "$(date -d yesterday +%F).zip"
これは、あいまいではなく、ファイル名が語彙順と時系列順に等しくソートされることを意味するので、あなたの形式よりも良い形式ですが、それをDDMMYYYY.zip
使用したい場合。%TF
%Td%Tm%TY