NextCloudではWindowsのUsersフォルダー以下のドキュメント(document)、画像(image)、ビデオ(video)のフォルダーを同期設定していました。
あるときから「修正日時が無効なため同期できません」というエラーが大量に発生し、同期ができないファイルが存在していました。
今回は、そのエラーの対応について記載しました。
エクスプローラーで空白
同期できないファイルおよびフォルダの作成日時、更新日時は空白の状態でした。
通常はアイコン表示になっていると思いますが、「表示」で「詳細」にすればファイル名以外に作成日時や更新日時が表示されます。アクセス日時を表示させるのであれば一覧の「名前」タブを左クリックしてメニューから「その他」を選択し「アクセス日時」にチェックすれば追加で表示ができます。
プロパティ詳細で空白
同期できないファイルおよびフォルダの作成日時、更新日時は空白の状態でした。
Get-ItemPropertyの出力は1970/01/01 9:00:00
PS > Get-ItemProperty ./無題5.txt | Select-Object -Property *
PSPath : Microsoft.PowerShell.Core\FileSystem::C:\Users\taro\ドキュメント\無題5.txt
PSParentPath : Microsoft.PowerShell.Core\FileSystem::C:\Users\taro\ドキュメント
PSChildName : 無題5.txt
PSDrive : C
PSProvider : Microsoft.PowerShell.Core\FileSystem
Mode : la---
ModeWithoutHardLink : la---
VersionInfo : File: C:\Users\taro\ドキュメント\無題5.txt
InternalName:
OriginalFilename:
FileVersion:
FileDescription:
Product:
ProductVersion:
Debug: False
Patched: False
PreRelease: False
PrivateBuild: False
SpecialBuild: False
Language:
BaseName : 無題5
Target :
LinkType :
Length : 66835
DirectoryName : C:\Users\taro\ドキュメント
Directory : C:\Users\taro\ドキュメント
IsReadOnly : False
FullName : C:\Users\taro\ドキュメント\無題5.txt
Extension : .txt
Name : 無題5.txt
Exists : True
CreationTime : 1970/01/01 9:00:00
CreationTimeUtc : 1970/01/01 0:00:00
LastAccessTime : 1970/01/01 9:00:00
LastAccessTimeUtc : 1970/01/01 0:00:00
LastWriteTime : 1970/01/01 9:00:00
LastWriteTimeUtc : 1970/01/01 0:00:00
LinkTarget :
Attributes : Archive, ReparsePoint
作成日時(CreationTime)が1970/01/01 9:00:00(JST9)になることはあっても、アクセス日時(LastAccessTime)が1970/01/01 9:00:00になることはあり得ません。
なぜなら作成日時、アクセス日時、更新日時を変更すると必ずアクセス日時は現在の時間になるためです。
試しにPowerShellで作成日時、アクセス日時、更新日時を1970/01/01 9:00:00に変更しても、アクセス日時はすぐに現在の時間に修正されます。更新日時を変更するとすべて現在の日時に修正されてしまいます。
ゆえに、作成日時、アクセス日時、更新日時が1970/01/01 9:00:00になってしまう原因は不明です。
恐らく、なんらかの処理で日付が取得できず初期値に設定されたのが理由だと思います。
更新日時を変更する
以下のPowerShellコマンドを実行すれば更新日時が変更され恐らくほかの作成日時やアクセス日時が変更されます。この例では2023/05/18 9:00:00に変更しています。
PS >Set-ItemProperty ./無題5.txt -Name LastWriteTime -Value ("2023/05/18 9:00:00")
単一のファイルであればこのコマンドの実行でファイル同期のエラーはなくなります。
現実には複数のファイルが階層のことなるフォルダー内に存在しています。
フォルダー内のすべてのファイルまたはフォルダーの更新時間を変更する場合は以下のPowerShellコマンドを実行します。この例では実行フォルダーをC:\Users\taro\ドキュメントに移動したのち更新日時が”1970/01/01 9:00:00″のファイルまたはフォルダーの更新日時を2023/05/18 9:00:00に変更しています。
PS >cd $user;cdドキュメント
PS >Get-ChildItem -Recurse | ForEach-Object {if($_.LastWriteTime -eq "1970/01/01 9:00:00") {Set-ItemProperty $_.FullName -Name LastWriteTime -Value ("2023/05/18 9:00:00) }}
コマンドの2箇所の”LastWriteTime”を”CreationTime”や”LastAccessTime”に変更すれば作成日時やアクセス日時は変更可能ですが、その後修正が掛かるケースがあるので注意が必要です。
使用したPowerShellコマンドは、条件文や変更内容のアクション部をカスタマイズすれば複数のファイルやフォルダーのプロパティの変更に応用できます。
以上でNextCloudでファイル同期時の「修正日時が無効なため同期できません」のエラーがなくなるはずです。