Project

extattr

0.0
No commit activity in last 3 years
No release in over 3 years
"extattr" is extended file attribute manipurator for Ruby. Supported for FreeBSD (extattr), GNU/Linux (xattr) and Microsoft Windows (NTFS Alternative Data Stream (ADS) + NTFS Extended Attributes (EA)).
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

 Project Readme

extattr - filesystem extended attributes manipurator for Ruby

extattr is filesystem extended attributes manipurator for Ruby on FreeBSD, GNU/Linux and Microsoft Windows.

extattr はファイルシステムの拡張属性を操作するライブラリで、FreeBSD、GNU/Linux、Windows に対応しています。

サポートされる環境で、統一的なメソッドを提供します。

実装については、以下のようになっています。

  • FreeBSD: extattr (extattr_list, extattr_get, extattr_set, extattr_delete)
  • GNU/Linux: xattr (listxattr, getxattr, setxattr, removexattr)
  • Microsoft Windows: NTFS ADS (代替データストリーム) / 拡張ファイル属性 (NtQueryEaFile, NtSetEaFile)

Tested system

  • PC-BSD/AMD64 10.0
  • lubuntu 13.10 (i386)
  • Microsoft Windows XP Professional SP3
  • Microsoft Windows 7 Professional SP1

GNU/Linux における特記事項

  • GNU/Linux で利用されている名前空間〈security〉〈trusted〉には未対応です。

Microsoft Windows における特記事項

  • Windows XP 以降を必要とします。Win2k でも動作するかもしれません (未検証)。
    Windows 9x シリーズでは require "extattr" の段階で例外が発生すると思われます (未検証)。

  • ExtAttr::USER は (比較的よく利用される) NTFS ADS に対する操作で、ExtAttr::SYSTEM が本来の (あまり利用されていない) 拡張ファイル属性に対する操作となります。

  • リパースポイント (ジャンクションやシンボリックリンク) に対する NTFS ADS は要素の取得や設定、削除は出来ません。
    必ずリンク先に対する操作となります (やり方がわかりません)。

  • 64 KiB を超える NTFS ADS は取得も設定も出来ません。
    これは『拡張属性』と捉えた場合、巨大なデータを扱えるべきではないという考えによるためです (本当のところは FreeBSD の拡張属性が最大 64KiB 弱であることが由来です)。

  • 巨大な NTFS ADS を扱いたい場合は、File.open でファイルとして扱えるので自由に読み書きできます。
    これは Ruby に限ったことではなく、Windows による仕様です。
    この場合の与えるファイル名は、path + ":" + name という形になります。

    filepath = "sample.txt"
    extattrname = "category"
    ntfs_ads_name = filepath + ":" + extattrname
    File.open(ntfs_ads_name, "r") do |file|
      ...
    end
    

既知のバグ

  • extattr_list のブロック内で extattr_set extattr_delete を行うと正確な列挙がされない場合がある

    解決方法: extattr_setextattr_delete のどちらかを同時に利用したい場合、extattr_list.each を用いてください。

参考資料

Specification