標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

DropBox が使っている代替データストリーム

会社PCにアクセスすると、なんか見知らぬフォルダーが出来てた。

f:id:zetamatta:20210104124941p:plain

電源入れっぱなしだったので、多分、他の人が UP したのはよいが、取り消したとか、そんな感じで出来上がったもんだろう。dropbox.com の方を見ても、別段サーバーには該当フォルダーは出来ていないようだ。

とはいえ、消してよいもんだか、ちょっと気になるので、DropBox のヘルプページを開いてみた。比較的よく検索されるトピックなのか、「DropBox マイナス…」とまでタイプすると、「DropBox マイナスマーク」まで Chrome が補完してくれた。

2番目のリンク先の『コマンドラインでファイルやフォルダを「無視」に設定する』というセクションを見ると、

Set-Content -Path 'C:\Users\yourname\Dropbox(Personal)\YourFileName.pdf' -Stream com.dropbox.ignored -Value 1

という PowerShell で無視と設定できるらしい。Set-Content って普通の組み込み関数だよな。-Stream とついているということは、代替データストリームとか何とかいう拡張属性のことかな。それなら別に PowerShell でなくもアクセスできたような気がする。

代替データストリームは dir /R で一覧が見られるようだ。

2018/10/11  17:41    <DIR>          scr (未同期アイテムの競合)
                                 83 scr (未同期アイテムの競合):com.dropbox.attributes:$DATA
                                 26 scr (未同期アイテムの競合):com.dropbox.attrs:$DATA
                                 17 scr (未同期アイテムの競合):com.dropbox.folder_policy:$DATA
                                  1 scr (未同期アイテムの競合):com.dropbox.ignored:$DATA

わお!思ったよりもたくさんあったわ。中身見られるかな?

$ type "scr (未同期アイテムの競合):com.dropbox.ignored:$DATA"
1

あ、はい(あっさりすぎて拍子抜けを隠せない)※1

この type は nyagos の内蔵 type なので、何か特別なことをしなくても「(ファイル名):com.dropbox.ignored:$DATA」というパスでオープンさえすればデータにアクセスできることを意味している。

ということは、あとは代替データストリームの「一覧」つまり dir /R と同等なことをどうにかして出せれば、ほぼ自由に読み書きができるということだ。FindFirst/Next 系の API を使えばよいのだろうか…

ググってみたら、FindFirstStream という API があって、個別のファイルに対して実行すればよいようだ。これ、100個ファイルがあったら、100回発行しなくちゃいけないということか。あまり調子に乗って使うべきものではなさそうだなぁ

まぁ、特別これを使ってなにをしようというプランがあるわけではないので、これくらいにしておくか…

※1 追記

CMD.EXE 内蔵の type ではダメっぽい

$ cmd /c type "scr (未同期アイテムの競合):com.dropbox.ignored:$DATA"
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。
exit status 1