ファイルのタイムスタンプを変更したくなった際、Windows環境でもLinux環境と同じようにtouchコマンドが使いたいと思うことがある。PowerShellでタイムスタンプを変更する場合は次のようなコマンド(スクリプト?)が使えるようだが、ちょっと長い感じ。
>powershell -C "(Get-Item {ファイルのパス名}).LastWriteTime = (Get-Date)"
このことを検索している過程で、Visual Studio CodeでGithubと連携する際にインストールした「Git for Windows」には「bash」が同梱されており、このbashならtouchコマンドが普通に使えることを知った。
>bash
$ touch --help
Usage: touch [OPTION]... FILE...
Update the access and modification times of each FILE to the current time.
これで問題解決かと思ったのですが、このbashにはひと手間が必要で、インストールしたままだと日本語のファイル名が文字化けしてしまいます。
$ ls
'Visual Studio Code.lnk' WinSCP.lnk desktop.ini '□'$'\202''□□'$'\203\236''□'$'\203''□□'$'\203\211''.lnk'
この問題の解決方法を検索したところ、ユーザーのホームディレクトリ(C:\Users\〇〇〇〇)に.bashrcファイルを作成し、その中に次のような内容を記述するといいらしい。
$ vi ~/.bashrc
export LC_ALL=ja_JP.utf8
export LANG=ja_JP.utf8
export LANGUAGE=ja_JP.utf8
export LC_CTYPE=ja_JP.utf8
export LC_NUMERIC=ja_JP.utf8
export LC_TIME=ja_JP.utf8
export LC_COLLATE=ja_JP.utf8
export LC_MONETARY=ja_JP.utf8
export LC_MESSAGES=ja_JP.utf8
上記を保存し、bashを再度実行。lsコマンドの結果は次のように変わった。
$ ls
desktop.ini 'Visual Studio Code.lnk' WinSCP.lnk コマンド.lnk
.bashrcファイルの内容は、本来.bash_profileファイルに記載する内容として紹介するサイトを参考にしたものです。.bash_profileファイルを使用する場合は、bashの起動時のパラメータに「-l」を指定する必要があるため、ここでは.bashrcファイルに適用しました。
実際にtouchコマンドを使ってみます。
$ ls -al readme.html
-rw-r--r-- 1 tmatsuur 197121 7399 4月 10 10:34 readme.html
$ touch readme.html
$ ls -al readme.html
-rw-r--r-- 1 tmatsuur 197121 7399 4月 10 12:48 readme.html
touchコマンド後、更新日時が変わっていますね。
さて、bash内ではフルパスの指定時に「/c」のようにドライブレターを先頭に指定する必要があるので、これには慣れが必要かもですね。