zipnoteコマンド


アニメ『中間管理録トネガワ』

カイジのスピンオフです。こちらもざわざわ言ってます。名前だけで引っ張るナレーション最高です。

今回学習するコマンドを、nameというキーワードで、探したいと思います。
man -k使います。

takk@deb9:~/tmp$ man -k name | head
nicknames (5)        - NIS マップ用のニックネーム変換テーブル
arch (1)             - マシンのハードウェア名を出力する (un...
basename (1)         - ファイル名からディレクトリと接尾辞...
basename (3)         - パス名を解析して各部分を取り出す
canonicalize_file_name (3) - 正規化された絶対パス名を返す
dirname (1)          - ファイル名の最後の要素を削除する
dirname (3)          - パス名を解析して各部分を取り出す
dnsdomainname (1)    - システムの DNS ドメイン名を表示する
domainname (1)       - システムの NIS/YP ドメイン名を表示・...
domainname (8)       - 現在のドメイン名を設定・表示する
takk@deb9:~/tmp$ 

man -k nameで全抽出すると、ライブラリ等も表示されますので、コマンド(1)に絞ります。

takk@deb9:~/tmp$ man -k name | grep '(1)'
arch (1)             - マシンのハードウェア名を出力する (un...
basename (1)         - ファイル名からディレクトリと接尾辞...
dirname (1)          - ファイル名の最後の要素を削除する
dnsdomainname (1)    - システムの DNS ドメイン名を表示する
domainname (1)       - システムの NIS/YP ドメイン名を表示・...
dpkg-name (1)        - Debian パッケージを完全パッケージ名に...
hostname (1)         - システムのホスト名を表示・設定する
logname (1)          - ユーザのログイン名を表示する
namei (1)            - 終端が見つかるまでパス名を辿る
nisdomainname (1)    - システムの NIS/YP ドメイン名を表示・...
uname (1)            - システム情報を表示する
volname (1)          - ボリューム名を返す
ypdomainname (1)     - システムの NIS/YP ドメイン名を表示・...
addr2line (1)        - convert addresses into file names and line numbers.
apropos (1)          - search the manual page names and descriptions
bsd-from (1)         - print names of those who have sent mail
chfn (1)             - change real user name and information
getent (1)           - get entries from Name Service Switch libraries
git-archive (1)      - Create an archive of files from a named tree
git-check-mailmap (1) - Show canonical names and email addresses of contacts
git-check-ref-format (1) - Ensures that a reference name is well formed
git-mv (1)           - Move or rename a file, a directory, or a symlink
git-name-rev (1)     - Find symbolic names for given revs
git-update-ref (1)   - Update the object name stored in a ref safely
gtk-query-settings (1) - Utility to print name and value of all GtkSettings...
gvfs-rename (1)      - Rename a file
hostnamectl (1)      - Control the system hostname
ifnames (1)          - Extract CPP conditionals from a set of files
killall (1)          - kill processes by name
logresolve (1)       - Resolve IP-addresses to hostnames in Apache log files
mkfifo (1)           - make FIFOs (named pipes)
montage (1)          - create a composite image by combining several separa...
montage-im6 (1)      - create a composite image by combining several separa...
montage-im6.q16 (1)  - create a composite image by combining several separa...
mv (1)               - move (rename) files
mysql_fix_extensions (1) - normalize table file name extensions
nmtui-hostname (1)   - Text User Interface for controlling NetworkManager
nsenter (1)          - run program with namespaces of other processes
nslookup (1)         - query Internet name servers interactively
pathchk (1)          - check whether file names are valid or portable
pgrep (1)            - look up or signal processes based on name and other ...
pkill (1)            - look up or signal processes based on name and other ...
prename (1)          - renames multiple files
pwd (1)              - print name of current/working directory
readlink (1)         - print resolved symbolic links or canonical file names
rename (1)           - renames multiple files
rename.ul (1)        - rename files
resolveip (1)        - resolve host name to IP address or vice versa
showrgb (1)          - display an rgb color-name database
ssh-argv0 (1)        - replaces the old ssh command-name as hostname handling
systemd-escape (1)   - Escape strings for usage in system unit names
systemd-resolve (1)  - Resolve domain names, IPV4 and IPv6 addresses, DNS r...
tnameserv (1)        - Interface Definition Language (IDL).
tty (1)              - print the file name of the terminal connected to sta...
unshare (1)          - run program with some namespaces unshared from parent
users (1)            - print the user names of users currently logged in to...
x86_64-linux-gnu-addr2line (1) - convert addresses into file names and line...
xfontsel (1)         - point and click selection of X11 font names
zipnote (1)          - write the comments in zipfile to stdout, edit commen...
takk@deb9:~/tmp$ 

一番最後のzipnoteが気になりました。なぜ気になったのかというと、英語が難しかったから。write the comments in zipfile from ではなくて、to stdoutなんですね。
または、read the comments in zipfile to stdoutではないのだろうか、私は、コマンドより、英語の方が勉強必要そうです。

さて、man zipnote。

zipnote(1)                 General Commands Manual                zipnote(1)

NAME
       zipnote  - write the comments in zipfile to stdout, edit comments and
       rename files in zipfile

SYNOPSIS
       zipnote [-w] [-b path] [-h] [-v] [-L] zipfile

ARGUMENTS
       zipfile  Zipfile to read comments from or edit.


zipファイルにコメントを埋め込めるんですね。さっそくzip作ってから確認してみましょう。

takk@deb9:~/tmp$ echo HELLO > a.txt
takk@deb9:~/tmp$ cat a.txt
HELLO
takk@deb9:~/tmp$ zip a.zip a.txt
  adding: a.txt (stored 0%)
takk@deb9:~/tmp$ 

zipファイルができたので、zipnoteでコメントを確認します。

takk@deb9:~/tmp$ zipnote a.zip
@ a.txt
@ (comment above this line)
@ (zip file comment below this line)
takk@deb9:~/tmp$ 

3行表示されました。
次はコメントを書き換えてみます。

man zipnoteでOPTIONを確認します。

OPTIONS
       -w     Write comments to a zipfile from stdin (see below).

       -b path
              Use path for the temporary zip file.

       -h     Show a short help.

       -v     Show version information.

       -L     Show software license.

-wを使い、stdinで渡せば良さそうです。やってみます。

takk@deb9:~/tmp$ echo 'This is a Hello file' | zipnote -w a.zip
zipnote error: Invalid comment format (unexpected input)
takk@deb9:~/tmp$ 

エラーになりました。一応zipnoteで確認。

takk@deb9:~/tmp$ zipnote a.zip
@ a.txt
@ (comment above this line)
@ (zip file comment below this line)
takk@deb9:~/tmp$ 

やはりコメントは変わってません。

man zipnoteを読み進めるとやり方が書いてありました。
まず、コメントをファイルに書き出して、

takk@deb9:~/tmp$ zipnote a.zip > comment
takk@deb9:~/tmp$ cat comment
@ a.txt
@ (comment above this line)
@ (zip file comment below this line)
takk@deb9:~/tmp$ 

書き出したファイルをvim等で編集します。

takk@deb9:~/tmp$ vim comment

新たなコメントには、@の横に=をつけておきます。

takk@deb9:~/tmp$ cat comment
@ a.txt
@=This is a Hello file.
@ (comment above this line)
@ (zip file comment below this line)
takk@deb9:~/tmp$ 

書き換えたファイルを-wオプションで適応します。

takk@deb9:~/tmp$ zipnote -w a.zip < comment
takk@deb9:~/tmp$ 

zipnoteでコメントを書き出してみると、

takk@deb9:~/tmp$ zipnote a.zip
@ This is a Hello file.
@ (comment above this line)
@ (zip file comment below this line)
takk@deb9:~/tmp$ 

コメントが変更されていました。
コメントの変更ルールが謎なので、それはまた別の機会にzipnoteのソースを確認することにします。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA