web-dev-qa-db-ja.com

Windows上のUbuntuでのBash-Windowsでファイルを更新するとファイルが非表示になります

Windows上のUbuntuでBashの問題が発生しています:BashのホームディレクトリC:\ Users\me\AppData\Local\lxss\home\me \にあるファイルをWindowsベースのソフトウェア(notepad ++ for例)、Bashはファイルをもう見ません。

したがって、Bashを使用してホームディレクトリにファイルを作成し、Windowsを使用して同じファイルを編集すると、Bashはそれを認識しなくなります。 Windowsからホームディレクトリにファイルをコピーして貼り付けるのと同じように、Bashはそれを認識しません。

それらのファイルをBashに表示する方法はありますか?

P.S. Windowsディレクトリ内のファイルと変更は、Bashから/ mnt/c/...まで常に表示され、ファイルを編集および移動した後も表示されます。

1
SergeyOvchinnik

最も簡単な解決策は、編集する前にファイルを別のディレクトリにコピーし、編集後に元の場所にコピーすることです。

この質問を見てください: Windows Linuxサブシステム-Ubuntuの外部のファイルへのアクセス

BashOnWindowsプロジェクトのGitHubプロジェクトへの参照があります。具体的には Issue 402 またはより具体的に このコメント これは次のようになります。

@ ducminhnguyen-他のチケットに関する議論によると、WindowsからLinuxサブシステムへの直接コピーはサポートされていません。 AppDataの下のどこかに(どこを忘れたか)、WSLファイルシステムのファイルが含まれているように見えるディレクトリがあります。ただし、そこに新しいファイルを配置したり、既存のファイルを変更したりすると、変更がWSL内に正しく反映されません。

私の推測では、LinuxはWindowsとは異なるファイルに関するメタデータ(およびディスクバッファリングモデルも異なるため、より多くのキャッシュ情報など)を格納する必要があり、これは現在、構造のマスターコピーを格納することによって実装されています。ある種のデータベース内のLinuxファイルシステムの一部であり、そのデータベースの便利なBLOBストアとしてWindowsファイルシステムを使用するだけです。

本当にこれを行う必要がある場合、回避策は、ドラッグアンドドロップの.batスクリプトなど、bash.exe -c "mv%1/home/$ USER /"を実行するスクリプトを作成することです。 (おそらく、%1を有効なWSLパスに変換するには、sedとtrを使用して巧妙な作業を行う必要があります。)

または、ファイルをWindowsディレクトリに配置し、WSL内で「cd〜; ln -s/mnt/c/path/to/my/files」を実行して、ファイルがWSLホームディレクトリにあるように見せることができますか?

2
Seth