在Linux中如何查看文件的修改日期

在Linux中如何查看文件的修改日期,第1张

有时候可能需要检查有关文件的详细信息,例如文件的修改日期。当你要检查文件的最后编辑时间时,本文可能会派上用场。在本文将学习4种方法查看文件的修改日期。

使用stat 命令

stat 命令 可以显示文件属性的详细信息,比如最近一次访问和修改文件的时间、文件大小等信息,使用起来比较简单,命令后面只需要加上文件名就可以:

[root@localhost ~]# stat hello_script.sh

  File: ‘hello_script.sh’

  Size: 31        Blocks: 8          IO Block: 4096  regular file

Device: fd00h/64768d Inode: 67169379    Links: 1

Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)  Gid: (    0/    root)

Context: unconfined_u:object_r:admin_home_t:s0

Access: 2020-10-15 19:13:24.628009932 +0800

Modify: 2020-10-15 19:07:18.266426499 +0800

Change: 2020-10-15 19:11:48.227856412 +0800

Birth: -

从上面的输出中,我们可以看到文件的访问日期、文件的修改日期、文件权限的修改日期以及其他参数。

如果只希望查看文件的修改日期,而不考虑所有其他信息,运行以下命令:

[root@localhost ~]# stat -c %y hello_script.sh

2020-10-15 19:07:18.266426499 +0800

-c选项用于指定自定义格式代替默认的输出,而'%y'标志显示上次修改时间。对于文件夹,语法保持不变。只需将文件名替换为文件夹名称即可。

使用date命令

date命令的用法是显示当前日期。但是当与-r选项一起使用时,可以显示文件的最后修改日期,如下所示:

[root@localhost ~]# date -r hello_script.sh

Thu Oct 15 19:07:18 CST 2020

使用ls -l命令

ls -l命令通常用于使用长列表显示有关文件的其他信息,例如文件权限和所有者,大小和创建日期。可以添加-t选项,这样就可以按照文件的修改时间来排列:

[root@localhost ~]# ls -lt

或者

[root@localhost ~]# ll -t

total 288

drwxr-xr-x. 2 root root    177 Oct 16 14:36 b

drwxr-xr-x. 2 root root    177 Oct 16 14:36 a

-rwxr-xr-x. 1 root root    119 Oct 15 19:20 backup_script.sh

-rwxr-xr-x. 1 root root    31 Oct 15 19:07 hello_script.sh

-rw-r--r--. 1 root root    227 Oct 13 16:39 content.txt

-rw-r--r--. 1 root root 277159 Oct 12 14:37 a.txt

drwxr-xr-x. 2 root root    195 Aug  6 14:12 Files

-rw-------. 1 root root  1284 Dec 29  2019 anaconda-ks.cfg

使用httpie工具

另一种检查文件的修改日期的方法是使用httpie ,是HTTP命令行客户端工具。该工具通常用于与HTTP服务器和API交互,还可以检查驻留在web服务器上文件的修改时间。

首先需要确保安装了python的pip包管理工具,然后安装httpie工具:

在 Centos 7/RHEL7中,运行以下命令安装httpie:

[root@localhost ~]# yum -y install python-pip

[root@localhost ~]# pip install --upgrade pip

[root@localhost ~]# pip install httpie

在Ubuntu / Deepin / Debian中运行以下命令安装httpie:

$ sudo apt install httpie

安装完成之后,那么如何查看web服务器上文件的修改时间呢?语法如下:

http -h  [url] | grep 'Last-Modified'

例如,从www. linux probe.com网站中,查看一张.png格式的图片修改时间:

[root@localhost ~]# http -h https://www.linuxprobe.com/wp-content/uploads/2020/06/6-1.png | grep -i 'Last-Modified'

Last-Modified: Fri, 05 Jun 2020 14:26:11 GMT

总结

在本文中,介绍了各种方法,可以使用这些方法列出文件的最后修改日期,甚至可以使用httpie工具列出web服务器上的文件的最后修改日期。

如果是windows平台,使用如下API:

HANDLE WINAPI FindFirstFile(

__in LPCTSTR lpFileName, //文件路径

__out LPWIN32_FIND_DATA lpFindFileData //文件属性信息

)

该函数可以获取文件制定文件包括时间在内的属性信息。这些信息包含在第二个参数执行的结构中:

typedef struct _WIN32_FIND_DATA {

DWORDdwFileAttributes

FILETIME ftCreationTime //文件创建时间

FILETIME ftLastAccessTime//文件访问时间

FILETIME ftLastWriteTime//最近一次修改时间

DWORDnFileSizeHigh

DWORDnFileSizeLow

DWORDdwReserved0

DWORDdwReserved1

TCHARcFileName[MAX_PATH]

TCHARcAlternateFileName[14]

} WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA

其中时间FILETIME结构体如下:

typedef struct _FILETIME {

DWORD dwLowDateTime

DWORD dwHighDateTime

} FILETIME, *PFILETIME

MSDN不推荐自己加减获取系统格式的时间,而是推荐使用

BOOL WINAPI FileTimeToSystemTime(

__in const FILETIME *lpFileTime, //上面获取的时间

__out LPSYSTEMTIME lpSystemTime //系统时间

)

这里获取的是系统时间:

typedef struct _SYSTEMTIME {

WORD wYear //年

WORD wMonth//月

WORD wDayOfWeek//周几

WORD wDay//日

WORD wHour//时

WORD wMinute//分

WORD wSecond//秒

WORD wMilliseconds//毫秒

} SYSTEMTIME, *PSYSTEMTIME

至此,时间成功获取

实例代码:

BOOL FileAttributes( LPCTSTR lpszFilePath/*文件路径*/ )

{

WIN32_FIND_DATA FindFileData = { 0 }

HANDLE hFile = ::FindFirstFile(lpszFilePath, &FindFileData)

if( INVALID_HANDLE_VALUE == hFile )

{ //handling error

return FALSE

}

SYSTEMTIME CreateTime = { 0 }//创建时间

SYSTEMTIME AccessTime = { 0 }//最近访问时间

SYSTEMTIME WriteTime = { 0 } //最近修改时间

if( !::FileTimeToSystemTime( FindFileData.ftCreationTime , &CreateTime) )

{

//handling error

return FALSE

}

if( !::FileTimeToSystemTime( FindFileData.ftLastAccessTime , &AccessTime) )

{

//handling error

return FALSE

}

if( !::FileTimeToSystemTime( FindFileData.ftLastWriteTime, &WriteTime))

{

//handling error

return FALSE

}

//OK 获取时间了,可以使用时间了

::CloseHandle( hFile )

return TRUE

}

如果用MFC实现就简单了点:

直接用

static void PASCAL SetStatus(

LPCTSTR lpszFileName,

const CFileStatus&status,

CAtlTransactionManager* pTM = NULL

)

这个静态成员就好了

struct CFileStatus

{

CTime m_ctime // creation date/time of file 创建时间

CTime m_mtime // last modification date/time of file 最近修改时间

CTime m_atime // last access date/time of file 最近访问时间

ULONGLONG m_size // logical size of file in bytes

DWORD m_attribute // logical OR of CFile::Attribute enum values

TCHAR m_szFullName[_MAX_PATH]// absolute path name

}

示例:

TCHAR* pFileName = _T("ReadOnly_File.dat")

CFileStatus status

CFile::GetStatus(pFileName, status)

//status中就有时间

//直接用CTime的Format函数格式化为随意形式的时间字符串格式即可


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11509434.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存