1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【WSLトラブル】Windowsからのファイルコピーで謎の`:Zone.Identifier`ファイル大量発生した話

Posted at

【WSLトラブル】Windowsからのファイルコピーで謎の:Zone.Identifierファイル大量発生?原因と削除方法を解説

みなさんこんにちは!
普段WindowsとWSL (Windows Subsystem for Linux) を行き来しながら開発している皆さん、こんな経験はありませんか?

WindowsのエクスプローラーからWSL上のディレクトリにファイルをドラッグ&ドロップやコピペで持ってきたら、いつの間にか元のファイル名の後ろに :Zone.Identifier が付いた、サイズ0の謎のファイルがたくさん作られていた…!

$ ls -alh
-rw-r--r-- 1 user user 4.5K Apr 11 16:46 init.sql
-rw-r--r-- 1 user user    0 Apr 11 16:44 init.sql:Zone.Identifier # ← なんだこれ!?
-rw-r--r-- 1 user user 8.2K Apr 11 16:46 config.yaml
-rw-r--r-- 1 user user    0 Apr 11 16:44 config.yaml:Zone.Identifier # ← こっちにも!

邪魔だし、数が増えると単純に見づらいですよね。これ、一体何者で、どうすれば消せるのでしょうか?
今回は、この :Zone.Identifier ファイルの正体と、安全かつ効率的に削除する方法について解説します。

:Zone.Identifier って何? ADS? xattr?

最初、このファイルを見たときなんだこれは?と思いましたが、調べてみるとWindowsの代替データストリーム (Alternate Data Stream, ADS)機能がLinux環境にゴミをたくさん作っているということが判明しました。

背景として、Windowsはインターネットからダウンロードしたファイルなどに出所情報を示すゾーン識別子 (Zone Identifier) をADSとして付与することがあります。WSL (特にWSL2) がLinuxファイルシステム (ext4など) を使うようになり、この情報が user.Zone.Identifier というxattrとして引き継がれるケースがあるようです。

ls -al の出力結果を見てみましょう。

-rw-r--r-- 1 user user    0 Apr 11 16:44 readme.md
-rw-r--r-- 1 user user    0 Apr 11 16:44 readme.md:Zone.Identifier

これはLinuxファイルシステム (ext4など) にADSやxattrが付与されている状態ではなく、単純に readme.md:Zone.Identifier というファイル名を持つ、サイズ0の独立したファイル として存在していることを示しています。

試しに、拡張属性を削除するコマンド setfattr を使ってみても…

$ setfattr -x user.Zone.Identifier readme.md:Zone.Identifier
setfattr: readme.md:Zone.Identifier: No such attribute # 属性がないよ!と怒られる

これは拡張属性を管理するファイルではなく、ファイル名にコロン : が含まれているだけのゴミファイルのようでした。

:Zone.Identifier ファイルを削除する方法

とりあえず不要なファイルは削除したいですよね。正体が「ファイル名にコロンが含まれる通常のファイル」だと分かれば、削除は簡単です。Linuxの標準的な rm コマンドが使えます。

1. 特定のファイルを削除する場合

# ファイル名を正確に指定して削除
rm readme.md:Zone.Identifier

# 削除されたか確認
ls -al 

ファイル名に特殊文字が含まれている場合は、クォーテーションで囲むか、バックスラッシュでエスケープする必要があるかもしれませんが、今回の : に関してはそのまま指定して問題なさそうでした。

2. 大量にあるファイルを一括削除する場合

ディレクトリ内に大量の :Zone.Identifier ファイルがある場合は、find コマンドを使うのが効率的です。

重要: rmfind ... -delete はファイルを完全に削除するコマンドです。実行前に、本当に削除したいファイルだけが対象になっているか確認することを強く推奨します。

# カレントディレクトリ以下にある `:Zone.Identifier` で終わるファイルを検索して表示 (確認用)
find . -type f -name '*:Zone.Identifier' -print

# 確認後、問題なければ実際に削除 (-delete オプション)
find . -type f -name '*:Zone.Identifier' -delete

# もしくは -exec rm {} \; を使う場合 (少し遅いが確実)
find . -type f -name '*:Zone.Identifier' -exec rm {} \;

まず -print で削除対象となるファイルリストを表示し、意図しないファイルが含まれていないか確認してから、-delete オプションや -exec rm {} \; で削除を実行しましょう。これで、散らかった :Zone.Identifier ファイルを一掃できます。

まとめ

WindowsのエクスプローラーからWSLへファイルをコピーした際に生成される :Zone.Identifier ファイルは、ADSやxattrではなく、単にファイル名にコロンが含まれたサイズ0の通常ファイルでした。

標準的ではない挙動のため原因特定は難しいですが、不要であれば rm コマンドや find コマンドを使って安全に削除できます。

もし同じ現象で困っていたら、ぜひこの方法を試してみてください!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?