ラベル .archive の投稿を表示しています。 すべての投稿を表示
ラベル .archive の投稿を表示しています。 すべての投稿を表示

2022年11月12日土曜日

SQLite3 SQLiteアーカイブ内のファイルを更新する (.archive -u)

概要

SQLiteアーカイブ内のファイルを更新するには「-u」オプションを使用する

実行環境
  • Windows 10 64bit
  • SQLite3 (3.39.2) Command-Line Shell

コマンドプロンプトやBashでアーカイブ内のファイルを更新する


sqlite> -- # 1.
sqlite> select * from sqlar;
┌─────────────┬───────┬────────────┬────┬──────────────────────┐
│    name     │ mode  │   mtime    │ sz │         data         │
├─────────────┼───────┼────────────┼────┼──────────────────────┤
│ sample1.txt │ 33206 │ 1667721196 │ 20 │ This is Sample Text. │
└─────────────┴───────┴────────────┴────┴──────────────────────┘
sqlite> .quit

C:\temp>rem # 2.
C:\temp>sqlite3 sample.sqlar -Au sample1.txt

C:\temp>sqlite3 sample.sqlar
SQLite version 3.39.2 2022-07-21 15:24:47
Enter ".help" for usage hints.
sqlite> .mode box

sqlite> -- # 3.
sqlite> select * from sqlar;
┌─────────────┬───────┬────────────┬────┬────────────────────────────────┐
│    name     │ mode  │   mtime    │ sz │              data              │
├─────────────┼───────┼────────────┼────┼────────────────────────────────┤
│ sample1.txt │ 33206 │ 1667722098 │ 30 │ This is Sample Text. (Updated) │
└─────────────┴───────┴────────────┴────┴────────────────────────────────┘

                
  1. アーカイブファイルの中身を確認する
  2. sample1.txtを更新する
  3. アーカイブファイル内のsample1.txtが更新出来たことが確認出来る

コマンドラインツール起動中にアーカイブ内のファイルを更新


sqlite> -- # 1.
sqlite> select * from sqlar;
┌─────────────┬───────┬────────────┬────┬──────────────────────┐
│    name     │ mode  │   mtime    │ sz │         data         │
├─────────────┼───────┼────────────┼────┼──────────────────────┤
│ sample1.txt │ 33206 │ 1667723473 │ 20 │ This is Sample Text. │
└─────────────┴───────┴────────────┴────┴──────────────────────┘

sqlite> -- # 2.
sqlite> .archive -u sample1.txt

sqlite> -- # 3.
sqlite> select * from sqlar;
┌─────────────┬───────┬────────────┬────┬────────────────────────────────┐
│    name     │ mode  │   mtime    │ sz │              data              │
├─────────────┼───────┼────────────┼────┼────────────────────────────────┤
│ sample1.txt │ 33206 │ 1667723620 │ 30 │ This is Sample Text. (Updated) │
└─────────────┴───────┴────────────┴────┴────────────────────────────────┘

                
  1. アーカイブファイルの中身を確認する
  2. sample1.txtを更新する
  3. アーカイブファイル内のsample1.txtが更新出来たことが確認出来る

複数のアーカイブ内のファイルを一括で更新する

スペース区切りでファイルパスを複数指定すればいい。


sqlite> -- # 1.
sqlite> select * from sqlar;
┌─────────────┬───────┬────────────┬────┬─────────────────────────┐
│    name     │ mode  │   mtime    │ sz │          data           │
├─────────────┼───────┼────────────┼────┼─────────────────────────┤
│ sample1.txt │ 33206 │ 1667740749 │ 23 │ This is Sample Text 01. │
│ sample2.txt │ 33206 │ 1667740738 │ 23 │ This is Sample Text 02. │
└─────────────┴───────┴────────────┴────┴─────────────────────────┘

sqlite> -- # 2.
sqlite> .archive -u sample1.txt sample2.txt

sqlite> -- # 3.
sqlite> select * from sqlar;
┌─────────────┬───────┬────────────┬────┬───────────────────────────────────┐
│    name     │ mode  │   mtime    │ sz │               data                │
├─────────────┼───────┼────────────┼────┼───────────────────────────────────┤
│ sample1.txt │ 33206 │ 1667740774 │ 33 │ This is Sample Text 01. (Updated) │
│ sample2.txt │ 33206 │ 1667740786 │ 33 │ This is Sample Text 02. (Updated) │
└─────────────┴───────┴────────────┴────┴───────────────────────────────────┘
                
  1. アーカイブファイルの中身を確認する
  2. 複数指定してアーカイブ内のファイルを更新する
  3. 複数のファイルが更新されていることが確認出来る

UpdateではなくUpsert

アーカイブ内に存在しないファイルパスを指定するとそのファイルが新規追加される。 単純なUpdateでは無くいわゆるUpsertのような処理になる。


sqlite> -- # 1.
sqlite> select * from sqlar;
┌─────────────┬───────┬────────────┬────┬─────────────────────────┐
│    name     │ mode  │   mtime    │ sz │          data           │
├─────────────┼───────┼────────────┼────┼─────────────────────────┤
│ sample1.txt │ 33206 │ 1667742033 │ 23 │ This is Sample Text 01. │
│ sample2.txt │ 33206 │ 1667742024 │ 23 │ This is Sample Text 02. │
└─────────────┴───────┴────────────┴────┴─────────────────────────┘

sqlite> -- # 2.
sqlite> .archive -u sample3.txt

sqlite> -- # 3.
sqlite> select * from sqlar;
┌─────────────┬───────┬────────────┬────┬─────────────────────────┐
│    name     │ mode  │   mtime    │ sz │          data           │
├─────────────┼───────┼────────────┼────┼─────────────────────────┤
│ sample1.txt │ 33206 │ 1667742033 │ 23 │ This is Sample Text 01. │
│ sample2.txt │ 33206 │ 1667742024 │ 23 │ This is Sample Text 02. │
│ sample3.txt │ 33206 │ 1667742155 │ 23 │ This is Sample Text 03. │
└─────────────┴───────┴────────────┴────┴─────────────────────────┘ 
                
  1. アーカイブファイルの中にsample3.txtがないことを確認する
  2. 「-u」でsample.txtを指定する
  3. アーカイブファイルにsample3.txtが新規登録されていることが確認出来る

参考URL

2022年11月5日土曜日

SQLite3 SQLiteアーカイブ内のファイルを取り出す (.archive -x)

概要

SQLiteアーカイブ内のファイルを取り出す(展開する)には「-x」オプションを使用する。

取り出す際には同じファイルパスの上書きに関する警告等は出ないので注意すること。

実行環境
  • Windows 10 64bit
  • SQLite3 (3.39.2) Command-Line Shell

コマンドプロンプトやBashでアーカイブ内のファイルを取り出す


C:\temp>rem # 1.
C:\temp>sqlite3 sample.sqlar -At
sample1.txt
sample2.txt

C:\temp>rem # 2.
C:\temp>sqlite3 sample.sqlar -Ax sample1.txt

C:\temp>rem # 3.
C:\temp>dir
    ドライブ C のボリューム ラベルは Windows です
    ボリューム シリアル番号は XXXX-XXXX です

    C:\temp のディレクトリ

2022/10/02  22:46    <DIR>          .
2022/10/02  22:46    <DIR>          ..
2022/10/02  22:46             1,536 sample.sqlar
2022/08/16  12:12                 9 sample1.txt
                4 個のファイル              X,XXX バイト
                2 個のディレクトリ  X,XXX,XXX,XXX バイトの空き領域
                
  1. アーカイブ内のファイルを確認する
  2. アーカイブからsample1.txtを取り出す
  3. アーカイブ内のファイルが取り出されたことが確認できる

コマンドラインツール起動中にアーカイブ内のファイルを取り出す


sqlite> -- # 1.
sqlite> .archive -t
sample1.txt
sample2.txt

sqlite> -- # 2.
sqlite> .archive -x sample1.txt

sqlite> -- # 3.
sqlite> .shell dir
    ドライブ C のボリューム ラベルは Windows です
    ボリューム シリアル番号は XXXX-XXXX です

    C:\temp のディレクトリ

2022/10/02  22:50    <DIR>          .
2022/10/02  22:50    <DIR>          ..
2022/10/02  22:46             1,536 sample.sqlar
2022/08/16  12:12                 9 sample1.txt
2022/08/16  12:12                 9 sample2.txt
2022/08/16  12:12                 9 sample3.txt
                4 個のファイル              X,XXX バイト
                2 個のディレクトリ  X,XXX,XXX,XXX バイトの空き領域

                
  1. アーカイブ内のファイルを確認する
  2. アーカイブからsample1.txtを取り出す
  3. アーカイブ内のファイルが取り出されたことが確認できる

複数/全てのアーカイブ内のファイルを一括で取り出す

スペース区切りでファイルパスを複数指定すれば複数のファイルを取り出せる。


sqlite> -- # 1.
sqlite> .archive -t
sample1.txt
sample2.txt
sample3.txt

sqlite> -- # 2.
sqlite> .archive -x sample1.txt sample2.txt

sqlite> -- # 3.
sqlite> .shell dir
 ドライブ C のボリューム ラベルは Windows です
 ボリューム シリアル番号は XXXX-XXXX です

 C:\temp のディレクトリ

2022/11/02  06:22    <DIR>          .
2022/11/02  06:22    <DIR>          ..
2022/11/02  06:19             1,536 sample.sqlar
2022/08/16  12:12                 9 sample1.txt
2022/08/16  12:12                 9 sample2.txt
               3 個のファイル               x,xxx バイト
               2 個のディレクトリ   x,xxx,xxx,xxx バイトの空き領域

                
  1. アーカイブ内に3つのファイルが登録されていることを確認する
  2. ファイルパスを複数指定してアーカイブから取り出す
  3. 指定したファイルが取り出されていることが確認出来る

ファイルパスを指定しなければ全てのファイルが取り出せる。


sqlite> -- # 1.
sqlite> .archive -t
sample1.txt
sample2.txt
sample3.txt

sqlite> -- # 2.
sqlite> .archive -x

sqlite> -- # 3.
sqlite> .shell dir
    ドライブ C のボリューム ラベルは Windows です
    ボリューム シリアル番号は XXXX-XXXX です

    C:\temp のディレクトリ

2022/11/02  06:52    <DIR>          .
2022/11/02  06:52    <DIR>          ..
2022/11/02  06:19             1,536 sample.sqlar
2022/08/16  12:12                 9 sample1.txt
2022/08/16  12:12                 9 sample2.txt
2022/08/16  12:12                 9 sample3.txt
                4 個のファイル               X,XXX バイト
                2 個のディレクトリ   X,XXX,XXX,XXX バイトの空き領域
                
  1. アーカイブ内に3つのファイルが登録されていることを確認する
  2. ファイルパスを複数指定せずにアーカイブから取り出す
  3. 全てのファイルが取り出されていることが確認出来る

参考URL

2022年10月15日土曜日

SQLite3 SQLiteアーカイブ内のファイルを削除する (.archive -r)

概要

SQLiteアーカイブ内のファイルを削除するには「-r」オプションを使用する

実行環境
  • Windows 10 64bit
  • SQLite3 (3.39.2) Command-Line Shell

コマンドプロンプトやBashでアーカイブ内のファイルを削除する


C:\temp>rem # 1.
C:\temp>sqlite3 sample.sqlar -At
sample1.txt
sample2.txt

C:\temp>rem # 2.
C:\temp>sqlite3 sample.sqlar -Ar sample1.txt

C:\temp>rem # 3.
C:\temp>sqlite3 sample.sqlar -At
sample2.txt
                
  1. アーカイブ内のファイルを確認する
  2. アーカイブからsample1.txtを削除
  3. アーカイブ内のファイルが削除されたことが確認できる

コマンドラインツール起動中にアーカイブ内のファイルを削除する


sqlite> -- # 1.
sqlite> .archive -t
sample1.txt
sample2.txt

sqlite> -- # 2.
sqlite> .archive -r sample1.txt

sqlite> -- # 3.
sqlite> .archive -t
sample2.txt
                
  1. アーカイブ内のファイルを確認する
  2. アーカイブからsample1.txtを削除
  3. アーカイブ内のファイルが削除されたことが確認できる

複数のアーカイブ内のファイルを一括で削除する

スペース区切りでファイルパスを複数指定すればいい。


sqlite> -- # 1.
sqlite> .archive -t
sample1.txt
sample2.txt
sample3.txt

sqlite> -- # 2.
sqlite> .archive -r sample1.txt sample2.txt

sqlite> -- # 3.
sqlite> .archive -t
sample3.txt
                
  1. アーカイブ内に3つのファイルが登録されていることを確認する
  2. ファイル名を複数指定してアーカイブから削除する
  3. ファイルが削除されたことが確認できる

参考URL

2022年10月8日土曜日

SQLite3 SQLiteアーカイブ内のファイルを一覧表示する (.archive -t)

概要

SQLiteアーカイブ内のファイルを一覧表示するには「-t」オプションを使用する

実行環境
  • Windows 10 64bit
  • SQLite3 (3.39.2) Command-Line Shell

コマンドプロンプトやBashでアーカイブ内のファイルを確認する


C:\temp>rem #1

C:\temp>sqlite3 sample.sqlar -Ac

C:\temp>rem #2.

C:\temp>sqlite3 sample.sqlar -Ai sample1.txt sample2.txt

C:\temp>rem #3.

C:\temp>sqlite3 sample.sqlar -At
sample1.txt
sample2.txt
                
  1. SQLiteアーカイブを新規作成
  2. 作成したSQLiteアーカイブにsample.txtとsample2.txtを追加
  3. SQLiteアーカイブ内のファイルを表示

コマンドラインツール起動中にアーカイブ内のファイルを確認する


sqlite> -- # 1.
sqlite> .archive -cf sample.sqlar

sqlite> -- # 2.
sqlite> .open sample.sqlar

sqlite> -- # 3.
sqlite> .archive -i sample1.txt sample2.txt

sqlite> -- # 4.
sqlite> .archive -t
sample1.txt
sample2.txt
                
  1. 新規アーカイブファイルの作成
  2. 作成したアーカイブファイルを開く
  3. 作成したSQLiteアーカイブにsample.txtとsample2.txtを追加
  4. SQLiteアーカイブ内のファイルを表示

参考URL

2022年10月1日土曜日

SQLite3 SQLiteアーカイブにファイルを追加する (.archive -i)

概要

SQLiteアーカイブファイルにファイルを追加するには「-i」オプションを使用する

実行環境
  • Windows 10 64bit
  • SQLite3 (3.39.2) Command-Line Shell

コマンドプロンプトやBashでアーカイブにファイルを追加する


C:\temp>rem #1

C:\temp>sqlite3 sample.sqlar -Ac

C:\temp>rem #2.

C:\temp>sqlite3 sample.sqlar -Ai sample.txt

C:\temp>rem #3.

C:\temp>sqlite3 sample.sqlar
SQLite version 3.39.2 2022-07-21 15:24:47
Enter ".help" for usage hints.
sqlite> select * from sqlar;
sample.txt|33206|1660619553|9|teststa
                
  1. SQLiteアーカイブを新規作成
  2. 作成したSQLiteアーカイブにsample.txtを追加
  3. sample.txtが追加されたことを確認

複数のファイルを一括で追加する場合、ファイルパスを羅列すればいい。


sqlite3 sample.sqlar -Ai sample1.txt sample2.txt sample3.txt
                

コマンドラインツール起動中にアーカイブにファイルを追加する


sqlite> -- # 1.
sqlite> .archive -cf sample.sqlar

sqlite> -- # 2.
sqlite> .open sample.sqlar

sqlite> -- # 3.
sqlite> .archive -i sample.txt

sqlite> -- # 4.
sqlite> select * from sqlar;
sample.txt|33206|1660619553|9|teststa
                
  1. 新規アーカイブファイルの作成
  2. 作成したアーカイブファイルを開く
  3. アーカイブにsample.txtを追加する
  4. sample.txtが追加されたことを確認

データが重複するようにファイルを追加しても何も起こらない

既に登録されているファイルと同じパスを指定してファイルを追加しても アーカイブ内のデータは更新されることはない。 また、エラーも出ないため注意が必要。


sqlite> .mode box
sqlite> select * from sqlar;
┌────────────┬───────┬────────────┬────┬─────────┐
│    name    │ mode  │   mtime    │ sz │  data   │
├────────────┼───────┼────────────┼────┼─────────┤
│ sample.txt │ 33206 │ 1660619553 │ 9  │ teststa │
└────────────┴───────┴────────────┴────┴─────────┘
sqlite> .archive -i sample.txt
sqlite> select * from sqlar;
┌────────────┬───────┬────────────┬────┬─────────┐
│    name    │ mode  │   mtime    │ sz │  data   │
├────────────┼───────┼────────────┼────┼─────────┤
│ sample.txt │ 33206 │ 1660619553 │ 9  │ teststa │
└────────────┴───────┴────────────┴────┴─────────┘
                

参考URL

2022年9月24日土曜日

SQLite3 新しいSQLiteアーカイブファイルを作成する (.archive -c)

概要

SQLiteアーカイブファイルを作成するには「-c」オプションを使用する。

実行環境
  • Windows 10 64bit
  • SQLite3 (3.39.2) Command-Line Shell

コマンドプロンプトやBashでアーカイブファイルを新規作成する


C:\temp>sqlite3 sample.sqlar -Ac

C:\temp>dir
    ドライブ C のボリューム ラベルは Windows です
    ボリューム シリアル番号は XXXX-XXX です

    C:\temp のディレクトリ

2022/09/22  22:44    <DIR>          .
2022/09/22  22:44    <DIR>          ..
2022/09/22  22:44             1,536 sample.sqlar
                1 個のファイル              x,xxx バイト
                2 個のディレクトリ  x,xxx,xxx,xxx バイトの空き領域
                

コマンドラインツール起動中にアーカイブファイルを新規作成する


sqlite> .archive -cf sample.sqlar
sqlite> .shell dir
 ドライブ C のボリューム ラベルは Windows です
 ボリューム シリアル番号は xxxx-xxxx です

 C:\temp のディレクトリ

2022/09/23  15:53    <DIR>          .
2022/09/23  15:53    <DIR>          ..
2022/09/23  15:53             1,536 sample.sqlar
               1 個のファイル              x,xxx バイト
               2 個のディレクトリ  x,xxx,xxx,xxx バイトの空き領域
                

参考URL

2022年9月17日土曜日

SQLite3 独自アーカイブ(archive)形式について 入門.2

概要

入門.1はこちら

この記事ではアーカイブ内の「sqlar」テーブルについて記載する。

コマンドラインツールで作成したアーカイブにはデフォルトで「sqlar」というテーブルがある。 このテーブルには複数のアーカイブの中身に関する情報が格納されている。 sqlarテーブルの各カラムの意味は以下の通り。

sqlar テーブル
カラム名 意味
name ファイル格納時のファイルパス
mode unixスタイルのアクセス権限
mtime ファイルの修正時刻(1970年1月1日0時0分からの秒数)
sz ファイルの圧縮前のサイズ
data アーカイブされているデータの内容

テキストファイルであれば「data」をSQLで文字列検索出来るし、 アーカイブした日時を確認することが出来る。

アーカイブ前後のデータを確認してみる

環境
  • Windows 10 64bit
  • SQLite3 ver.3.39.2

C:\temp>rem # 1.

C:\temp>dir
 ドライブ C のボリューム ラベルは Windows です
 ボリューム シリアル番号は 2CE7-FFC0 です

 C:\temp のディレクトリ

2022/09/05  23:35    <DIR>          .
2022/09/05  23:35    <DIR>          ..
2022/08/16  12:12                 9 sample1.txt
2022/08/20  14:42             3,614 sample2.png
               2 個のファイル               x,xxx バイト
               2 個のディレクトリ   x,xxx,xxx,xxx バイトの空き領域

C:\temp>rem # 2.

C:\temp>sqlite3 archive.sqlar -Ac

C:\temp>rem # 3.

C:\temp>sqlite3 archive.sqlar -Ai ./sample1.txt ./sample2.png

C:\temp>rem # 4.
C:\temp>dir
 ドライブ C のボリューム ラベルは Windows です
 ボリューム シリアル番号は 2CE7-FFC0 です

 C:\temp のディレクトリ

2022/09/06  00:19    <DIR>          .
2022/09/06  00:19    <DIR>          ..
2022/09/06  00:19             1,536 archive.sqlar
2022/08/16  12:12                 9 sample1.txt
2022/08/20  14:42             3,614 sample2.png
               3 個のファイル               5,159 バイト
               2 個のディレクトリ  46,067,060,736 バイトの空き領域


C:\temp>sqlite3 archive.sqlar
SQLite version 3.39.2 2022-07-21 15:24:47
Enter ".help" for usage hints.

sqlite> .tables
sqlar

sqlite> -- # 5.
sqlite> select * from sqlar ;
./sample1.txt|33206|1660619553|9|teststa
./sample2.png|33206|1660974123|3614|x???s???b``???p    b``i```??`??{?E)?? w'?u?d^9,?????$?????b? ????h?fOx/?i~w?     V?@???? ????AA)h? #3C???? _????A@pT??Q??JG??*U:?tT??Q??JG?RY??m?z?????6?c?t?sY??

                
  1. アーカイブ前のデータ
  2. 新規アーカイブの作成
  3. アーカイブにデータを追加
  4. データ追加後のアーカイブサイズ
  5. アーカイブ内容の確認 (./sample2.pngは画像データなのでコンソールでは表示されない)

sqlarファイルと画像ファイルのサイズを比較すると、それなりに圧縮されていることがわかる。

mtimeカラムを日時に直すには

datetime()関数を使えばいい。


sqlite> select datetime('1970-01-01','+' || mtime || ' seconds') as s_datetime from sqlar;
2022-08-16 03:12:33
2022-08-20 05:42:03
                

参考URL

2022年9月10日土曜日

SQLite3 独自アーカイブ(archive)形式について 入門.1

概要

SQLite を使って複数のファイルやフォルダを一つのファイルにまとめることができる。 よく知られているアーカイブ手法としてzipやtarなどがあるが、 SQLiteのアーカイブはSQLを使って格納されているファイルを調べることが出来るのが特徴。

アーカイブファイルはzipやtarコマンドで完璧に管理できてるよ、という場合には使わなくてもよい。 アーカイブファイルをSQLで確認出来ることに魅力を感じる、というのであれば試してみるといい。

SQLite 独自アーカイブを利用するにはコマンドラインツールのver 3.23.0 以降が必要。

Text, Image, etc...
Text, Image, etc...
table: sqlar
table: sqlar
SQLite
SQLite
Archive
Archive
Text is not SVG - cannot display

アーカイブファイルを作ってファイルを出し入れしてみる

まず空のアーカイブを作成し、そこにテキストファイルを出し入れしてみる。 ここではアーカイブの拡張子を「.sqlar」としているが、なんでもいい。

環境
  • Windows 10 64bit
  • SQLite3 ver.3.39.2

C:\temp> rem # 1.
C:\temp> sqlite3 archive.sqlar -Ac

C:\temp> rem # 2.
C:\temp> sqlite3 archive.sqlar -Ai ./sample.txt

C:\temp> rem # 3.
C:\temp> sqlite3 archive.sqlar -At
sample.txt

C:\temp> rem # 4.
C:\temp> sqlite3 archive.sqlar -Ax ./sample.txt
                
  1. 「archive.sqlar」という新規ファイルを作成する
  2. 「archive.sqlar」に「sample.txt」を追加する
  3. 「archive.sqlar」に格納されているファイルを確認する
  4. 「archive.sqlar」から「sample.txt」を取り出す

アーカイブの中身をSQLで確認する

sqliteアーカイブには「sqlar」というテーブルがあり、 アーカイブされたファイルの情報が格納されている。


C:\temp>rem # 1.

C:\temp>sqlite3 archive.sqlar -Ac

C:\temp>
C:\temp>rem # 2.

C:\temp>sqlite3 archive.sqlar -Ai ./sample.txt

C:\temp>
C:\temp>rem # 3.

C:\temp>sqlite3 archive.sqlar
SQLite version 3.39.2 2022-07-21 15:24:47
Enter ".help" for usage hints.

sqlite> -- # 4.
sqlite> .tables
sqlar

sqlite> .mode box

sqlite> -- # 5.
sqlite> select * from sqlar;
┌──────────────┬───────┬────────────┬────┬────────────────────┐
│     name     │ mode  │   mtime    │ sz │        data        │
├──────────────┼───────┼────────────┼────┼────────────────────┤
│ ./sample.txt │ 33206 │ 1660972613 │ 18 │ This is sample.txt │
└──────────────┴───────┴────────────┴────┴────────────────────┘
                

最初は概念とアーカイブの作り方、ファイルの出し入れができればOK。

参考URL