수정된 파일과 마지막 액세스 타임스탬프를 업데이트하는 Windows Powershell에서 실행하는 스크립트가 있습니다. Windows 7 노트북에서 스크립트를 실행하고 있는데 ext4로 포맷된 네트워크 연결 USB 드라이브에 있는 ext4 파일 시스템의 파일 타임스탬프가 업데이트됩니다.
여기 스크립트가 있습니다 ...
$filePath = "D:\Computing\Powershell\datetest\1TB_1.csv"
$csv = Import-Csv -Path $filePath #-Delimiter "`t"
foreach($row in $csv)
{
"Path = $($row.FullName) and Create_TS = $($row.CreatedDateUtc) and Modified_TS = $($row.ModifiedDateUtc) and Accessed_TS = $($row.AccessedDateUtc)"
$item = Get-Item $($row.FullName)
$item.CreationTimeUtc = $(Get-Date $($row.CreatedDateUtc))
$item.LastWriteTimeUtc = $(Get-Date $($row.ModifiedDateUtc))
$item.LastAccessTimeUtc = $(Get-Date $($row.AccessedDateUtc))
}
.csv에는 4개의 열이 포함되어 있습니다: File path; Creation timestamp; LastAccessed_timestamp 위의 스크립트를 실행하면 해당 타임스탬프 셀 행의 타임스탬프를 사용하여 지정된 파일 경로에 있는 파일의 타임스탬프가 업데이트됩니다.
테스트 결과 작동하는 것 같지만 이러한 파일의 Create_timestamp를 업데이트하려고 하면 .csv 파일에서 Create_timestamp 값을 가져오지 않고 대신 .csv 파일에서 수정되고 액세스된 타임스탬프 중 이전 값이 된다는 것을 깨달았습니다.
ext4 파일 시스템의 파일에서 이런 일이 발생합니까? 아니면 생성 타임스탬프를 업데이트할 수 있는 방법이 있나요?
답변1
Linux에서 파일의 crtime(생성 시간)을 설정하는 것은 파일 시스템 디버깅이 필요한 매우 중요한 작업입니다.
이전에 솔루션을 작성했습니다.ext4fs 파일 시스템에서 파일/디렉토리의 crtime 복사 또는 복원
Windows에서 어떻게 읽기-쓰기 ext4fs 파티션을 마운트했는지 잘 모르겠습니다. ext2fsd를 사용하여 마운트했다고 가정하겠습니다. 이 경우 불행하게도 해당 debugfs
응용 프로그램은 Linux에서만 작동하므로 운이 좋지 않습니다. 예를 들어 mingw를 사용하여 Windows용으로 컴파일하고 싶을 수도 있지만 Windows에는 블록 장치에 직접 액세스할 수 있는 다른 API가 있으므로 이는 간단한 작업이 아닙니다.
편집하다:
ext4로 포맷된 네트워크 연결 USB 드라이브.
죄송합니다. 이 경우 파일에 crtime을 설정할 수 없습니다.
답변2
PowerScript를 사용하여 전화를 걸 수 있습니다.SharpExt4 .Net 라이브러리Linux 파일 타임스탬프를 수정합니다.
Powershell에서 .Net 코드(C#) 및 DLL 사용
C# 샘플 코드:
...
//Open a Linux ext4 disk assume your SD card/USB is physical disk 1
var disk = ExtDisk.Open(1);
//Get the file system
var fs = ExtFileSystem.Open(disk.Parititions[0]);
//Check file exists
if(fs.FileExists("/etc/hosts"))
{
fs.SetCreationTime("/etc/hosts", DateTime,Now);
}
...