You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

315 lines
25 KiB

<!DOCTYPE html>
<!-- Generated by pkgdown: do not edit by hand --><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Work With Filesystem Object Extended Attributes • xattrs</title>
<!-- jquery --><script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha384-nrOSfDHtoPMzJHjVTdCopGqIqeYETSXhZDFyniQ8ZHcVy08QesyHcnOUpMpqnmWq" crossorigin="anonymous"></script><!-- Bootstrap --><link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script><!-- Font Awesome icons --><link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous">
<!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js" integrity="sha384-cV+rhyOuRHc9Ub/91rihWcGmMmCXDeksTtCihMupQHSsi8GIIRDG0ThDc3HGQFJ3" crossorigin="anonymous"></script><!-- pkgdown --><link href="pkgdown.css" rel="stylesheet">
<script src="jquery.sticky-kit.min.js"></script><script src="pkgdown.js"></script><meta property="og:title" content="Work With Filesystem Object Extended Attributes">
<meta property="og:description" content="Filesystem path target extended attributes store extra, customizable,
small bits of info. For example, author name, file character encoding, short
comments, security status, etc. Methods are provided to list, extract and work
with these attributes.">
<meta name="twitter:card" content="summary">
<!-- mathjax --><script src="https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script><!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="container template-article">
<header><div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<span class="navbar-brand">
<a class="navbar-link" href="index.html">xattrs</a>
<span class="label label-default" data-toggle="tooltip" data-placement="bottom" title="Released package">0.1.0</span>
</span>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>
<a href="index.html">
<span class="fa fa-home fa-lg"></span>
</a>
</li>
<li>
<a href="reference/index.html">Reference</a>
</li>
<li>
<a href="news/index.html">Changelog</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li>
<a href="https://github.com/hrbrmstr/xattrs">
<span class="fa fa-github fa-lg"></span>
</a>
</li>
</ul>
</div>
<!--/.nav-collapse -->
</div>
<!--/.container -->
</div>
<!--/.navbar -->
</header><div class="row">
<div class="col-md-9 contents">
<!-- README.md is generated from README.Rmd. Please edit that file -->
<div id="xattrs" class="section level1">
<div class="page-header"><h1 class="hasAnchor">
<a href="#xattrs" class="anchor"></a>xattrs</h1></div>
<p>Work With Filesystem Object Extended Attributes</p>
<div id="description" class="section level2">
<h2 class="hasAnchor">
<a href="#description" class="anchor"></a>Description</h2>
<p>Filesystem path target extended attributes store extra, customizable, small bits of info. For example, author name, file character encoding, short comments, security status, etc. Methods are provided to list, extract and work with these attributes.</p>
</div>
<div id="note" class="section level2">
<h2 class="hasAnchor">
<a href="#note" class="anchor"></a>NOTE</h2>
<p>I don’t think this will work on Windows.</p>
</div>
<div id="whats-inside-the-tin" class="section level2">
<h2 class="hasAnchor">
<a href="#whats-inside-the-tin" class="anchor"></a>What’s Inside The Tin</h2>
<p>The following functions are implemented:</p>
<ul>
<li>
<code>get_xattr</code>: Retrieve the contents of the named xattr</li>
<li>
<code>get_xattr_df</code>: Retrieve a data frame of xattr names, sizes and (raw) contents for a target path</li>
<li>
<code>get_xattr_raw</code>: Retrieve the (raw) contents of the named xattr</li>
<li>
<code>get_xattr_size</code>: Retrieve the size (bytes) of the named xattr</li>
<li>
<code>has_xattrs</code>: Test if a target path has xattrs</li>
<li>
<code>is_bplist</code>: Tests whether a raw vector is really a binary plist</li>
<li>
<code>list_xattrs</code>: List extended attribute names of a target path</li>
<li>
<code>read_bplist</code>: Convert binary plist to something usable in R</li>
</ul>
</div>
<div id="installation" class="section level2">
<h2 class="hasAnchor">
<a href="#installation" class="anchor"></a>Installation</h2>
<div class="sourceCode" id="cb1"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb1-1" data-line-number="1">devtools<span class="op">::</span><span class="kw"><a href="http://www.rdocumentation.org/packages/devtools/topics/install_github">install_github</a></span>(<span class="st">"hrbrmstr/xattrs"</span>)</a></code></pre></div>
</div>
<div id="usage" class="section level2">
<h2 class="hasAnchor">
<a href="#usage" class="anchor"></a>Usage</h2>
<div class="sourceCode" id="cb2"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb2-1" data-line-number="1"><span class="kw">library</span>(xattrs)</a>
<a class="sourceLine" id="cb2-2" data-line-number="2"><span class="kw">library</span>(tidyverse)</a>
<a class="sourceLine" id="cb2-3" data-line-number="3"></a>
<a class="sourceLine" id="cb2-4" data-line-number="4"><span class="co"># current verison</span></a>
<a class="sourceLine" id="cb2-5" data-line-number="5"><span class="kw">packageVersion</span>(<span class="st">"xattrs"</span>)</a>
<a class="sourceLine" id="cb2-6" data-line-number="6">## [1] '0.1.0'</a></code></pre></div>
<div id="basic-operation" class="section level3">
<h3 class="hasAnchor">
<a href="#basic-operation" class="anchor"></a>Basic Operation</h3>
<p>Extended attributes seem to get stripped when R builds pkgs so until I can figure out an easy way not to do that, just find any file on your system that has an <code>@</code> next to the permissions string in an <code>ls -l</code> directory listing.</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb3-1" data-line-number="1">sample_file &lt;-<span class="st"> "~/Downloads/Elementary-Lunch-Menu.pdf"</span></a>
<a class="sourceLine" id="cb3-2" data-line-number="2"></a>
<a class="sourceLine" id="cb3-3" data-line-number="3"><span class="kw"><a href="reference/list_xattrs.html">list_xattrs</a></span>(sample_file)</a>
<a class="sourceLine" id="cb3-4" data-line-number="4">## character(0)</a>
<a class="sourceLine" id="cb3-5" data-line-number="5"></a>
<a class="sourceLine" id="cb3-6" data-line-number="6"><span class="kw"><a href="reference/get_xattr_size.html">get_xattr_size</a></span>(sample_file, <span class="st">"com.apple.metadata:kMDItemWhereFroms"</span>)</a>
<a class="sourceLine" id="cb3-7" data-line-number="7">## [1] 0</a></code></pre></div>
<p>Extended attributes can be <em>anything</em> so it makes alot of sense to work with the contents as a raw vector:</p>
<div class="sourceCode" id="cb4"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb4-1" data-line-number="1"><span class="kw"><a href="reference/get_xattr_raw.html">get_xattr_raw</a></span>(sample_file, <span class="st">"com.apple.metadata:kMDItemWhereFroms"</span>)</a>
<a class="sourceLine" id="cb4-2" data-line-number="2">## raw(0)</a></code></pre></div>
<p>There is a “string” version of the function, but it may return “nothing” if there are embedded NULLs or other breaking characters in the contents:</p>
<div class="sourceCode" id="cb5"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb5-1" data-line-number="1"><span class="kw"><a href="reference/get_xattr.html">get_xattr</a></span>(sample_file, <span class="st">"com.apple.metadata:kMDItemWhereFroms"</span>)</a>
<a class="sourceLine" id="cb5-2" data-line-number="2">## character(0)</a></code></pre></div>
<p>You are really better off doing this if you really want a raw string conversion:</p>
<div class="sourceCode" id="cb6"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb6-1" data-line-number="1"><span class="kw">readBin</span>(<span class="kw"><a href="reference/get_xattr_raw.html">get_xattr_raw</a></span>(sample_file, <span class="st">"com.apple.metadata:kMDItemWhereFroms"</span>), <span class="st">"character"</span>)</a>
<a class="sourceLine" id="cb6-2" data-line-number="2">## [1] ""</a></code></pre></div>
<p>More often than not (on macOS) extended attributes are “binary property lists” (or “binary plist” for short). You can test to see if the returned raw vector is likely a binary plist:</p>
<div class="sourceCode" id="cb7"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb7-1" data-line-number="1"><span class="kw"><a href="reference/is_bplist.html">is_bplist</a></span>(<span class="kw"><a href="reference/get_xattr_raw.html">get_xattr_raw</a></span>(sample_file, <span class="st">"com.apple.metadata:kMDItemWhereFroms"</span>))</a>
<a class="sourceLine" id="cb7-2" data-line-number="2">## [1] FALSE</a></code></pre></div>
<p>If it is, you can get the data out of it. For now, this makes a system call to <code>plutil</code> on macOS and <code>plistutil</code> on other systems. You’ll be given a hint on how to install <code>plistutil</code> if it’s not found.</p>
<div class="sourceCode" id="cb8"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb8-1" data-line-number="1"><span class="kw"><a href="reference/read_bplist.html">read_bplist</a></span>(<span class="kw"><a href="reference/get_xattr_raw.html">get_xattr_raw</a></span>(sample_file, <span class="st">"com.apple.metadata:kMDItemWhereFroms"</span>))</a>
<a class="sourceLine" id="cb8-2" data-line-number="2">## [[1]]</a>
<a class="sourceLine" id="cb8-3" data-line-number="3">## [1] NA</a></code></pre></div>
<p>This is R, so you should really consider doing this instead of any of the above #rectanglesrule:</p>
<div class="sourceCode" id="cb9"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb9-1" data-line-number="1"><span class="kw"><a href="reference/get_xattr_df.html">get_xattr_df</a></span>(sample_file)</a>
<a class="sourceLine" id="cb9-2" data-line-number="2">## # A tibble: 0 x 3</a>
<a class="sourceLine" id="cb9-3" data-line-number="3">## # ... with 3 variables: name &lt;chr&gt;, size &lt;dbl&gt;, contents &lt;list&gt;</a></code></pre></div>
<p>you can live dangerously even with data frames, tho:</p>
<div class="sourceCode" id="cb10"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb10-1" data-line-number="1"><span class="kw"><a href="reference/get_xattr_df.html">get_xattr_df</a></span>(sample_file) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb10-2" data-line-number="2"><span class="st"> </span><span class="kw">mutate</span>(<span class="dt">txt =</span> <span class="kw">map_chr</span>(contents, readBin, <span class="st">"character"</span>)) <span class="co"># potentially "dangerous"</span></a>
<a class="sourceLine" id="cb10-3" data-line-number="3">## # A tibble: 0 x 4</a>
<a class="sourceLine" id="cb10-4" data-line-number="4">## # ... with 4 variables: name &lt;chr&gt;, size &lt;dbl&gt;, contents &lt;list&gt;, txt &lt;chr&gt;</a></code></pre></div>
</div>
<div id="extended-example" class="section level3">
<h3 class="hasAnchor">
<a href="#extended-example" class="anchor"></a>Extended Example</h3>
<p>We can process a whole directory of files to see what extended attributes various path targets have:</p>
<div class="sourceCode" id="cb11"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb11-1" data-line-number="1">fils &lt;-<span class="st"> </span><span class="kw">list.files</span>(<span class="st">"~/Downloads"</span>, <span class="dt">full.names =</span> <span class="ot">TRUE</span>) </a>
<a class="sourceLine" id="cb11-2" data-line-number="2"></a>
<a class="sourceLine" id="cb11-3" data-line-number="3">xdf &lt;-<span class="st"> </span><span class="kw">map_df</span>(<span class="kw">set_names</span>(fils, fils), get_xattr_df, <span class="dt">.id=</span><span class="st">"path"</span>)</a>
<a class="sourceLine" id="cb11-4" data-line-number="4"></a>
<a class="sourceLine" id="cb11-5" data-line-number="5"><span class="kw">count</span>(xdf, name, <span class="dt">sort=</span><span class="ot">TRUE</span>) </a>
<a class="sourceLine" id="cb11-6" data-line-number="6">## # A tibble: 5 x 2</a>
<a class="sourceLine" id="cb11-7" data-line-number="7">## name n</a>
<a class="sourceLine" id="cb11-8" data-line-number="8">## &lt;chr&gt; &lt;int&gt;</a>
<a class="sourceLine" id="cb11-9" data-line-number="9">## 1 com.apple.metadata:kMDItemWhereFroms 9</a>
<a class="sourceLine" id="cb11-10" data-line-number="10">## 2 com.apple.quarantine 9</a>
<a class="sourceLine" id="cb11-11" data-line-number="11">## 3 com.apple.lastuseddate#PS 4</a>
<a class="sourceLine" id="cb11-12" data-line-number="12">## 4 com.apple.diskimages.fsck 1</a>
<a class="sourceLine" id="cb11-13" data-line-number="13">## 5 com.apple.diskimages.recentcksum 1</a></code></pre></div>
<p>And we can work with <code>com.apple.metadata:kMDItemWhereFroms</code> binary plist data in bulk:</p>
<div class="sourceCode" id="cb12"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb12-1" data-line-number="1"><span class="kw">filter</span>(xdf, name <span class="op">==</span><span class="st"> "com.apple.metadata:kMDItemWhereFroms"</span>) <span class="op">%&gt;%</span></a>
<a class="sourceLine" id="cb12-2" data-line-number="2"><span class="st"> </span><span class="kw">filter</span>(<span class="kw">map_lgl</span>(contents, is_bplist)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb12-3" data-line-number="3"><span class="st"> </span><span class="kw">mutate</span>(<span class="dt">converted =</span> <span class="kw">map</span>(contents, read_bplist)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb12-4" data-line-number="4"><span class="st"> </span><span class="kw">select</span>(size, converted) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb12-5" data-line-number="5"><span class="st"> </span><span class="kw">mutate</span>(<span class="dt">converted =</span> <span class="kw">map</span>(converted, <span class="op">~</span><span class="kw">flatten_chr</span>(.x<span class="op">$</span>plist<span class="op">$</span>array<span class="op">$</span>string))) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb12-6" data-line-number="6"><span class="st"> </span><span class="kw">unnest</span>() <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb12-7" data-line-number="7"><span class="st"> </span><span class="kw">mutate</span>(<span class="dt">converted =</span> urltools<span class="op">::</span><span class="kw"><a href="http://www.rdocumentation.org/packages/urltools/topics/domain">domain</a></span>(converted)) <span class="co"># you don't rly need to see the full URLs for this example</span></a>
<a class="sourceLine" id="cb12-8" data-line-number="8">## # A tibble: 9 x 2</a>
<a class="sourceLine" id="cb12-9" data-line-number="9">## size converted </a>
<a class="sourceLine" id="cb12-10" data-line-number="10">## &lt;dbl&gt; &lt;chr&gt; </a>
<a class="sourceLine" id="cb12-11" data-line-number="11">## 1 110 arxiv.org </a>
<a class="sourceLine" id="cb12-12" data-line-number="12">## 2 116 128.84.21.199 </a>
<a class="sourceLine" id="cb12-13" data-line-number="13">## 3 86 arxiv.org </a>
<a class="sourceLine" id="cb12-14" data-line-number="14">## 4 104 arxiv.org </a>
<a class="sourceLine" id="cb12-15" data-line-number="15">## 5 86 arxiv.org </a>
<a class="sourceLine" id="cb12-16" data-line-number="16">## 6 132 docs.aws.amazon.com </a>
<a class="sourceLine" id="cb12-17" data-line-number="17">## 7 161 nms.lcs.mit.edu </a>
<a class="sourceLine" id="cb12-18" data-line-number="18">## 8 161 osquery-packages.s3.amazonaws.com</a>
<a class="sourceLine" id="cb12-19" data-line-number="19">## 9 172 s3.amazonaws.com</a></code></pre></div>
</div>
<div id="full-suite" class="section level3">
<h3 class="hasAnchor">
<a href="#full-suite" class="anchor"></a>Full Suite</h3>
<div class="sourceCode" id="cb13"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb13-1" data-line-number="1"><span class="co"># Create a temp file for the example</span></a>
<a class="sourceLine" id="cb13-2" data-line-number="2">tf &lt;-<span class="st"> </span><span class="kw">tempfile</span>(<span class="dt">fileext =</span> <span class="st">".csv"</span>)</a>
<a class="sourceLine" id="cb13-3" data-line-number="3"><span class="kw">write.csv</span>(mtcars, tf)</a>
<a class="sourceLine" id="cb13-4" data-line-number="4"></a>
<a class="sourceLine" id="cb13-5" data-line-number="5"><span class="co"># has attributes? (shld be FALSE)</span></a>
<a class="sourceLine" id="cb13-6" data-line-number="6"><span class="kw"><a href="reference/has_xattrs.html">has_xattrs</a></span>(tf)</a>
<a class="sourceLine" id="cb13-7" data-line-number="7">## [1] FALSE</a>
<a class="sourceLine" id="cb13-8" data-line-number="8"><span class="kw"><a href="reference/get_xattr.html">get_xattr</a></span>(tf, <span class="st">"is.rud.setting"</span>)</a>
<a class="sourceLine" id="cb13-9" data-line-number="9">## character(0)</a>
<a class="sourceLine" id="cb13-10" data-line-number="10"></a>
<a class="sourceLine" id="cb13-11" data-line-number="11"><span class="co"># set an attribute</span></a>
<a class="sourceLine" id="cb13-12" data-line-number="12"><span class="kw"><a href="reference/set_xattr.html">set_xattr</a></span>(tf, <span class="st">"is.rud.setting.a"</span>, <span class="st">"first attribut"</span>)</a>
<a class="sourceLine" id="cb13-13" data-line-number="13"><span class="kw"><a href="reference/get_xattr.html">get_xattr</a></span>(tf, <span class="st">"is.rud.setting.a"</span>)</a>
<a class="sourceLine" id="cb13-14" data-line-number="14">## [1] "first attribut"</a>
<a class="sourceLine" id="cb13-15" data-line-number="15"><span class="kw"><a href="reference/get_xattr_size.html">get_xattr_size</a></span>(tf, <span class="st">"is.rud.setting.a"</span>)</a>
<a class="sourceLine" id="cb13-16" data-line-number="16">## [1] 14</a>
<a class="sourceLine" id="cb13-17" data-line-number="17"></a>
<a class="sourceLine" id="cb13-18" data-line-number="18"><span class="co"># shld be TRUE</span></a>
<a class="sourceLine" id="cb13-19" data-line-number="19"><span class="kw"><a href="reference/has_xattrs.html">has_xattrs</a></span>(tf)</a>
<a class="sourceLine" id="cb13-20" data-line-number="20">## [1] TRUE</a>
<a class="sourceLine" id="cb13-21" data-line-number="21"></a>
<a class="sourceLine" id="cb13-22" data-line-number="22"><span class="kw"><a href="reference/set_xattr.html">set_xattr</a></span>(tf, <span class="st">"is.rud.setting.b"</span>, <span class="st">"second attribute"</span>)</a>
<a class="sourceLine" id="cb13-23" data-line-number="23"><span class="kw"><a href="reference/get_xattr.html">get_xattr</a></span>(tf, <span class="st">"is.rud.setting.b"</span>)</a>
<a class="sourceLine" id="cb13-24" data-line-number="24">## [1] "second attribute"</a>
<a class="sourceLine" id="cb13-25" data-line-number="25"><span class="kw"><a href="reference/get_xattr_size.html">get_xattr_size</a></span>(tf, <span class="st">"is.rud.setting.b"</span>)</a>
<a class="sourceLine" id="cb13-26" data-line-number="26">## [1] 16</a>
<a class="sourceLine" id="cb13-27" data-line-number="27"></a>
<a class="sourceLine" id="cb13-28" data-line-number="28"><span class="co"># overwrite an attribute</span></a>
<a class="sourceLine" id="cb13-29" data-line-number="29"><span class="kw"><a href="reference/set_xattr.html">set_xattr</a></span>(tf, <span class="st">"is.rud.setting.a"</span>, <span class="st">"first attribute"</span>)</a>
<a class="sourceLine" id="cb13-30" data-line-number="30"><span class="kw"><a href="reference/get_xattr.html">get_xattr</a></span>(tf, <span class="st">"is.rud.setting.a"</span>)</a>
<a class="sourceLine" id="cb13-31" data-line-number="31">## [1] "first attribute"</a>
<a class="sourceLine" id="cb13-32" data-line-number="32"><span class="kw"><a href="reference/get_xattr_size.html">get_xattr_size</a></span>(tf, <span class="st">"is.rud.setting.a"</span>)</a>
<a class="sourceLine" id="cb13-33" data-line-number="33">## [1] 15</a>
<a class="sourceLine" id="cb13-34" data-line-number="34"></a>
<a class="sourceLine" id="cb13-35" data-line-number="35"><span class="co"># see all the attributes</span></a>
<a class="sourceLine" id="cb13-36" data-line-number="36"><span class="kw"><a href="reference/list_xattrs.html">list_xattrs</a></span>(tf)</a>
<a class="sourceLine" id="cb13-37" data-line-number="37">## [1] "is.rud.setting.a" "is.rud.setting.b"</a>
<a class="sourceLine" id="cb13-38" data-line-number="38"></a>
<a class="sourceLine" id="cb13-39" data-line-number="39"><span class="co"># data frame vs individual functions</span></a>
<a class="sourceLine" id="cb13-40" data-line-number="40"><span class="kw"><a href="reference/get_xattr_df.html">get_xattr_df</a></span>(tf)</a>
<a class="sourceLine" id="cb13-41" data-line-number="41">## # A tibble: 2 x 3</a>
<a class="sourceLine" id="cb13-42" data-line-number="42">## name size contents </a>
<a class="sourceLine" id="cb13-43" data-line-number="43">## &lt;chr&gt; &lt;dbl&gt; &lt;list&gt; </a>
<a class="sourceLine" id="cb13-44" data-line-number="44">## 1 is.rud.setting.a 15 &lt;raw [15]&gt;</a>
<a class="sourceLine" id="cb13-45" data-line-number="45">## 2 is.rud.setting.b 16 &lt;raw [16]&gt;</a>
<a class="sourceLine" id="cb13-46" data-line-number="46"></a>
<a class="sourceLine" id="cb13-47" data-line-number="47"><span class="co"># remove attribute</span></a>
<a class="sourceLine" id="cb13-48" data-line-number="48"><span class="kw"><a href="reference/rm_xattr.html">rm_xattr</a></span>(tf, <span class="st">"is.rud.setting"</span>)</a>
<a class="sourceLine" id="cb13-49" data-line-number="49"><span class="kw"><a href="reference/get_xattr.html">get_xattr</a></span>(tf, <span class="st">"is.rud.setting"</span>)</a>
<a class="sourceLine" id="cb13-50" data-line-number="50">## character(0)</a>
<a class="sourceLine" id="cb13-51" data-line-number="51"></a>
<a class="sourceLine" id="cb13-52" data-line-number="52"><span class="co"># cleanup</span></a>
<a class="sourceLine" id="cb13-53" data-line-number="53"><span class="kw">unlink</span>(tf)</a></code></pre></div>
</div>
</div>
<div id="code-of-conduct" class="section level2">
<h2 class="hasAnchor">
<a href="#code-of-conduct" class="anchor"></a>Code of Conduct</h2>
<p>Please note that this project is released with a <a href="CONDUCT.html">Contributor Code of Conduct</a>. By participating in this project you agree to abide by its terms.</p>
</div>
</div>
</div>
<div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
<div class="links">
<h2>Links</h2>
<ul class="list-unstyled">
<li>Browse source code at <br><a href="https://github.com/hrbrmstr/xattrs">https://​github.com/​hrbrmstr/​xattrs</a>
</li>
<li>Report a bug at <br><a href="https://github.com/hrbrmstr/xattrs/issues">https://​github.com/​hrbrmstr/​xattrs/​issues</a>
</li>
</ul>
</div>
<div class="license">
<h2>License</h2>
<ul class="list-unstyled">
<li>
<a href="https://opensource.org/licenses/mit-license.php">MIT</a> + file <a href="LICENSE-text.html">LICENSE</a>
</li>
</ul>
</div>
<div class="developers">
<h2>Developers</h2>
<ul class="list-unstyled">
<li>Bob Rudis <br><small class="roles"> Author, maintainer </small> <a href="https://orcid.org/0000-0001-5670-2640" target="orcid.widget"><img src="https://members.orcid.org/sites/default/files/vector_iD_icon.svg" class="orcid" height="16"></a> </li>
<li>Brandon Fosdick <br><small class="roles"> Author </small> <br><small>(extattr.h C++ library)</small>
</li>
</ul>
</div>
</div>
</div>
<footer><div class="copyright">
<p>Developed by Bob Rudis, Brandon Fosdick.</p>
</div>
<div class="pkgdown">
<p>Site built with <a href="http://pkgdown.r-lib.org/">pkgdown</a>.</p>
</div>
</footer>
</div>
</body>
</html>