Windows 11 23H2 以降、エクスプローラーが 7z、tar などの解凍に対応しました。さらに、Build 25992 では圧縮も可能となったようです。7-zip を追加インストールしなくてもこれらのアーカイブを取り扱えるのは嬉しいですよね。
一方で、PowerShell の Expand-Archive
コマンドレットは拡張されておらず、ZIP 形式の解凍しかできません。
Expand-Archive .\archive.7z .\
GAC Version Location
--- ------- --------
False v4.0.30319 C:\Program Files\WindowsApps\Microsoft.PowerShell_7.…
OperationStopped: File 'E:\test\archive.7z' does not appear to be a valid zip archive.
せっかく標準機能で 7z が取り扱えるようになったのですから、コマンドラインからも操作してみたいですよね。どうにかできないものか。
Windows 11 に同梱されている bsdtar (libarchive) をコマンドラインから利用する
実は、Windows 10 1803 以降には tar コマンドが同梱されています。この tar コマンドは GNU tar ではなく、FreeBSD 版 tar (libarchive) です:
tar.exe --help
tar.exe(bsdtar): manipulate archive files
First option must be a mode specifier:
-c Create -r Add/Replace -t List -u Update -x Extract
Common Options:
-b # Use # 512-byte records per I/O block
-f <filename> Location of archive (default \\.\tape0)
-v Verbose
-w Interactive
Create: tar.exe -c [options] [<file> | <dir> | @<archive> | -C <dir> ]
<file>, <dir> add these items to archive
-z, -j, -J, --lzma Compress archive with gzip/bzip2/xz/lzma
--format {ustar|pax|cpio|shar} Select archive format
--exclude <pattern> Skip files that match pattern
-C <dir> Change to <dir> before processing remaining files
@<archive> Add entries from <archive> to output
List: tar.exe -t [options] [<patterns>]
<patterns> If specified, list only entries that match
Extract: tar.exe -x [options] [<patterns>]
<patterns> If specified, extract only entries that match
-k Keep (don't overwrite) existing files
-m Don't restore modification times
-O Write entries to stdout, don't restore to disk
-p Restore permissions (including ACLs, owner, file flags)
bsdtar 3.6.2 - libarchive 3.6.2 zlib/1.2.5.f-ipp liblzma/5.2.5 bz2lib/1.0.8 libzstd/1.5.4
そのため、tar -c
を実行しても GNU tar でおなじみの 空のアーカイブ作成はご容赦願います
という独特な表現を見ることはできません:
tar -c
tar: 空のアーカイブ作成はご容赦願います
より詳しい情報は 'tar --help' または 'tar --usage' で.
bsdtar -c
bsdtar: no files or directories specified
tar.exe -c
tar.exe: no files or directories specified
FreeBSD 版 tar は、tar や gz はもちろん、7z 等の多様なアーカイブ形式に対応しています:
## Supported Formats
Currently, the library automatically detects and reads the following formats:
* Old V7 tar archives
* POSIX ustar
* GNU tar format (including GNU long filenames, long link names, and sparse files)
* Solaris 9 extended tar format (including ACLs)
* POSIX pax interchange format
* POSIX octet-oriented cpio
* SVR4 ASCII cpio
* Binary cpio (big-endian or little-endian)
* PWB binary cpio
* ISO9660 CD-ROM images (with optional Rockridge or Joliet extensions)
* ZIP archives (with uncompressed or "deflate" compressed entries, including support for encrypted Zip archives)
* ZIPX archives (with support for bzip2, ppmd8, lzma and xz compressed entries)
* GNU and BSD 'ar' archives
* 'mtree' format
* 7-Zip archives
* Microsoft CAB format
* LHA and LZH archives
* RAR and RAR 5.0 archives (with some limitations due to RAR's proprietary status)
* XAR archives
The library also detects and handles any of the following before evaluating the archive:
* uuencoded files
* files with RPM wrapper
* gzip compression
* bzip2 compression
* compress/LZW compression
* lzma, lzip, and xz compression
* lz4 compression
* lzop compression
* zstandard compression
The library can create archives in any of the following formats:
* POSIX ustar
* POSIX pax interchange format
* "restricted" pax format, which will create ustar archives except for entries that require pax extensions (for long filenames, ACLs, etc).
* Old GNU tar format
* Old V7 tar format
* POSIX octet-oriented cpio
* SVR4 "newc" cpio
* Binary cpio (little-endian)
* PWB binary cpio
* shar archives
* ZIP archives (with uncompressed or "deflate" compressed entries)
* GNU and BSD 'ar' archives
* 'mtree' format
* ISO9660 format
* 7-Zip archives
* XAR archives
When creating archives, the result can be filtered with any of the following:
* uuencode
* gzip compression
* bzip2 compression
* compress/LZW compression
* lzma, lzip, and xz compression
* lz4 compression
* lzop compression
* zstandard compression
というわけで、tar.exe
を叩くだけでコマンドラインから 7z を圧縮・解凍できてしまうのです:
エクスプローラの 7z 対応も libarchive を利用しているため、順序としてはコマンドラインで先に対応していたことになります。私も Windows 10 の頃から tar.exe
が同梱されていたことは知っていたのですが、それが FreeBSD 版 tar で、ここまで広範囲をカバーできるものとは認識していませんでした。3
とはいえ、開発者にとって嬉しいのは Linux との相互運用性という意味で tar および gz、bzip2 への対応でしょう。4 本件に限らず、最近の Windows の開発者への寄り添い具合には目を見張るものがあります。この調子で開発者フレンドリーな姿勢を継続してほしいですね。
参考リンク
- Windows 11がRARや7-zipなどの解凍にネイティブ対応。libarchiveライブラリ利用 | テクノエッジ TechnoEdge
- Bringing the power of AI to Windows 11 - unlocking a new era of productivity for customers and developers with Windows Copilot and Dev Home - Windows Developer Blog
- Expand-Archive (Microsoft.PowerShell.Archive) - PowerShell | Microsoft Learn
- Tar and Curl Come to Windows! - Microsoft Community Hub
- 「エクスプローラー」に「Git」を統合 ~アプリ開発者のためのWindowsシェル改善 - 窓の杜
- 【windows10】tarファイルをコマンドプロンプトで解凍できる
- Windowsのtarコマンドで tar.gzファイルをtarファイルにする
- bsdtarをUbuntuで使う
- FreeBSD の tar がすごい
- Linux コマンドの多言語対応 ~ tar の「空のアーカイブ作成はご容赦願います」の謎に迫る~
- libarchive
- libarchive/libarchive: Multi-format archive and compression library
- Release Libarchive 3.6.2 · libarchive/libarchive
- bsdtar(1) - FreeBSD Manual Pages
-
Announcing Windows 11 Insider Preview Build 25992 (Canary Channel) | Windows Insider Blog ↩
-
https://github.com/libarchive/libarchive/blob/v3.6.2/README.md ↩
-
実際、Windows 10 の
tar.exe
では 7z を解凍しようとしてもLZMA codec is unsupported
となってしまうようです。tar.exe --help
の結果からも、liblzma
が含まれていないことが確認できます。 ↩ -
ちなみに
.tgz
と.tbz2
はエクスプローラーで開けましたが、.tbz
は非対応でした。 ↩