Code Monkey home page Code Monkey logo

ruby-extattr's Introduction

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

ruby-extattr's People

Contributors

dearblue avatar okeeblow avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

okeeblow

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.