使用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函数格式化为随意形式的时间字符串格式即可
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)