UNIX Shell脚本如何获取文件日期?ls无年份显示问题求助
在老版本UNIX中获取文件完整日期的方法
因为你的UNIX版本不支持stat和ls的--full-time/--time-style选项,下面是几个可行的替代方案:
1. 使用Perl一行命令
Perl在绝大多数老UNIX系统上都预装了,你可以用它直接读取文件的修改时间并格式化输出:
perl -e '@stat = stat("your_file"); print scalar localtime($stat[9]), "\n"'
解释:
stat("your_file")获取文件的所有属性,其中第10个元素(索引9)是文件的修改时间戳(epoch时间)localtime($stat[9])将时间戳转换为本地时间格式,scalar让它输出字符串形式(比如Wed Oct 11 14:32:05 2023)
如果需要自定义日期格式(比如YYYY-MM-DD HH:MM:SS),可以用:
perl -e '@stat = stat("your_file"); ($sec,$min,$hour,$mday,$mon,$year) = localtime($stat[9]); printf "%04d-%02d-%02d %02d:%02d:%02d\n", $year+1900, $mon+1, $mday, $hour, $min, $sec'
2. 利用find命令的格式化输出
部分老UNIX的find支持-printf参数,可以直接输出完整日期:
find /path/to/your_file -maxdepth 0 -printf "%TY-%Tm-%Td %TH:%TM:%TS %p\n"
如果你的find不支持-printf,可以试试部分商用UNIX自带的ls特殊选项——比如HP-UX的ls -E会显示完整时间戳(含年份),结合find批量处理:
find . -name "your_file" -exec ls -ldE {} \;
3. 使用date命令结合文件时间戳
如果你的系统支持date命令的-r选项(读取文件修改时间),可以直接格式化输出:
date -r your_file "+%Y-%m-%d %H:%M:%S"
注意:部分老UNIX的date可能没有-r选项,需要先测试可用性。
内容的提问来源于stack exchange,提问作者karthickraja
相关产品推荐
相关产品推荐

