如何获取变量中存储文件的最后修改时间?date命令报错求助
问题分析与解决
报错原因
你的oldestfile变量存储的是ls输出的完整行内容(包含权限、所有者、文件大小等字段),而date -r仅接受单个文件名/路径作为参数。当你执行date -r $oldestfile时,shell会把整行内容按空格拆分成多个参数传给date,导致它识别到多余的操作数(比如jssteele89),从而报错。
解决步骤
1. 修正变量赋值,仅提取目标目录的路径/名称
替换原来的变量赋值命令,只提取ls输出的最后一列(即文件名):
oldestfile=$(ls -Ulta f41895.archivetosmarsh.com/emailarchive*/Maildir | grep .duplicated999 | tail -n 1 | awk '{print $NF}')
如果要更可靠地处理特殊文件名(比如含空格的名称),推荐用find命令替代ls:
oldestfile=$(find f41895.archivetosmarsh.com/emailarchive*/Maildir -name ".duplicated999" -type d | sort | tail -n 1)
2. 获取EPOCH格式的最后修改时间
用date -r结合+%s参数输出时间戳,注意给变量加双引号避免参数拆分:
date -r "$oldestfile" +%s
执行后就能得到目标目录的最后修改时间戳(EPOCH格式)。
内容的提问来源于stack exchange,提问作者jssteele89
相关产品推荐
相关产品推荐

