このページの翻訳:
ソースの表示
最近の変更サイトマップ

FreeBSD cpは拡張ファイル属性をコピーしない(FreeBSD 12現在)

FreeBSDのcpコマンドは拡張ファイル属性を一切コピーしない。FreeBSD 12.0-RELEASE-p4で確認。すなわち、現時点ではFreeBSDでcpすると拡張ファイル属性が失われる。

「-pオプションを付ければいいんじゃね?」と思ったあなた、あまーい!cpのmanにある通り、-pオプションはファイルの変更日時、アクセス日時、フラグ、パーミッション、ACL、UID、GIDしか保持しない。

ここに拡張ファイル属性付きのファイルhasxattr.txtがあるじゃろ。

$ ls -al
total 42
drwxr-xr-x   2 Decomo  Decomo    3 10月 22 00:11 .
drwxr-xr-x  56 Decomo  Decomo  190 10月 21 23:43 ..
-rwxr--r--   1 Decomo  Decomo    0 10月 21 23:49 hasxattr.txt
$ lsextattr user *
hasxattr.txt    OpusMetaInformation     DOSATTRIB

そしてcp -pするじゃろ。

$ cp -p hasxattr.txt hasxattr_cp-p.txt

拡張ファイル属性を表示すると…

$ lsextattr user *
hasxattr.txt    OpusMetaInformation     DOSATTRIB
hasxattr_cp-p.txt

\(^o^)/

ファイラーで表示させてみても見事にコピーした方は拡張ファイル属性が消えている(オレンジ色のカラーラベル情報がOpusMetaInformationっていう拡張ファイル属性に保存されてる)。

拡張ファイル属性好きとしては悲しい…。

sysutils/coreutilsに入ってるGNU cpならどうだと試してみるも、つれないお返事…

$ gcp --preserve=xattr hasxattr.txt hasxattr_gcp.txt
gcp: 拡張属性を保護できません。cp が xattr サポートなしで作成されています

rsync -Xやmvでは拡張ファイル属性が保持される。

$ rsync -X hasxattr.txt hasxattr_rsync.txt
$ mv hasxattr.txt hasxattr_mv.txt
$ lsextattr user *
hasxattr_cp-p.txt
hasxattr_mv.txt OpusMetaInformation     DOSATTRIB
hasxattr_rsync.txt      OpusMetaInformation     DOSATTRIB

調べてたら、FreeBSD/Linux/MacOSのコマンド別に拡張ファイル属性の対応状況が書いてある素敵なぺージを発見。
Extended attributes: the good, the not so good, the bad.

それにしても、coreutilsのビルドオプションでgcpの拡張ファイル属性対応を選べるようにして欲しいなぁ…。

Comments




blog/2019/2019-10-22.txt · 最終更新: 2019-10-21 16:13 by Decomo
CC Attribution-Noncommercial-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0