WSLのディストリビューション間でファイル/ディレクトリを移動する

これはなに Link to this heading

WindowsでWSLを使っている。使っているディストリビューションがUbuntu18.04だったのだが、サポートが切れるため、Ubuntu18.04から22.04に移行する必要が出てきた。 このときに取った方法を備忘録としてメモしておく。

とった手順 Link to this heading

失敗 Link to this heading

最初に取った方法は、Windowsのエクスプローラーで、\\wsl$\{ディストリビューション名}\home\{ユーザ名}にアクセスして、ファイルをコピーする方法だった。 この方法は結構手軽でよさそうだったのだが、コピー先の方にのみXXX Zone.Identifierという謎のファイルが各ファイルごとにできてしまい、これが邪魔だった。

XXX Zone.Identifierというファイルは、ChatGPT曰く、ファイルがどのゾーン(インターネット/イントラネット/ロカル)から来たかを記録するためのもの1らしい。 削除しても問題ないらしいが、邪魔なので、別の方法を取ることにした。

成功 Link to this heading

そこで、移動先のディストリビューションでsshサーバを立てて、移動元のディストリビューションからscpでコピーする方法を取ることにした。 結論を言えば、この方法でうまくいった。

SSHサーバは以下のコマンドでインストールして起動した。

sudo apt update
sudo apt install openssh-server
sudo service ssh start

その後、移動元のディストリビューションで、以下のようにしてコピーした。

scp -r /home/{ユーザ名}/target-dir/ {ユーザ名}@localhost:/home/{ユーザ名}/workspace/

-rオプションをつけることで、ディレクトリごとコピーできる。

{ユーザ名}は環境のユーザ名に置き換えること。

これで、target-dirディレクトリを、移動先のディストリビューションへコピーできた。 コピーした後に、移動前のディストリビューションでtarget-dirを削除すれば、移動完了である。

補足 Link to this heading

ちなみに、今回はSSHサーバが移動先のディストリビューションだけで立っていたため、ポート番号を指定しなくてもlocalhostで接続できた。 複数のSSHサーバを立てている場合は、移動先のディストリビューションのSSHサーバのポート番号を調べて、-P {ポート番号}オプションをつける必要があるはずである。


  1. Windowsの代替データストリーム(Alternate Data Stream, ADS)に関連する。本来はNTFSの隠しADSだが、WSLはLinuxなので、ゴミファイルのように見えてしまうとのこと。 ↩︎

Licensed under CC BY-NC-SA 4.0
最終更新 9月 06, 2025
Hugo で構築されています。
テーマ StackJimmy によって設計されています。