WSLで777となったファイルやディレクトリをchmodでumaskの値に一括変更

小ネタです。

経緯

何も設定していないWSL上で普通のLinuxみたいに開発していたらパーミッションが 777 になってしまいます。

これを避ける設定として以下のような設定があります。

wsl.conf を設定して、

$ cat <<EOF | sudo tee -a /etc/wsl.conf
[automount]
options = "metadata"
EOF

WSLを再起動。

> wsl --shutdown

PC交換後にこれを忘れていて気付いたらパーミッションが全部777になっていました。

本題

特定のディレクトリやファイルを、umaskの値にリセットする方法です。NTFSマウントしているディレクトリだとファイル数によっては、それなりに処理の時間がかかります。

umask 022
TARGET_PATH=~/my/dir/

# ディレクトリのパーミッションをumaskの値にリセット
mkdir base_dir
find ${TARGET_PATH} -type d -exec chmod --reference ./base_dir {}  \;
rm -fR ./base_dir

# ファイルのパーミッションをumaskの値にリセット
touch base_file
find ${TARGET_PATH} -type f -exec chmod --reference ./base_file {}  \;
rm -f ./base_file