gpt4 book ai didi

Linux Shell - 字符串操作然后以分钟为单位计算文件的年龄

转载 作者:太空宇宙 更新时间:2023-11-04 05:05:16 24 4
gpt4 key购买 nike

我正在编写一个脚本来计算目录中最旧文件的年龄。第一个运行的命令是:

OLDFILE=`ls -lt $DIR | grep "^-" | tail -1 `    
echo $OLDFILE

输出包含的内容不仅仅是文件名。例如

-rwxrwxr-- 1 abc abc 334 May 10 2011 ABCD_xyz20110510113817046.abc.bak

Q1/。如何获取上一行最后一个空格之后的输出?这会给我文件名。我意识到需要某种字符串操作,但对 shell 脚本编写很陌生。

第二季度/。如何以分钟为单位获取此文件的年龄?

最佳答案

要获取最旧的文件名,

ls -lt | awk '/^-/{file=$NF}END{print file}'

但是,如果您的文件名称中包含空格等,则此方法并不可靠。通常,您应该尝试 avoid parsing the output from ls .

使用stat,您可以获取机器可读格式的文件创建日期,以自 1970 年 1 月 1 日起的秒数表示;使用 date +%s 您可以以相同的格式获取当前时间。减去并除以 60。(更多 Awk 技能对于算术来说会派上用场。)

最后,对于替代解决方案,请查看 find 的选项;特别是,它的 printf 格式字符串允许您提取文件的年龄。下面将直接获取最旧文件的年龄(以秒为单位)和 inode 号:

find . -maxdepth 1 -type f -printf '%T@ %i\n' |
sort -n | head -n 1

使用 inode 编号可以避免文件名奇怪的问题;一旦你有了一个 inode,将其转换为文件名就很容易了:

find . -maxdepth 1 -inum "$number"

将两者结合在一起,您可能需要这样的东西:

# set -- Replace $@ with output from command
set -- $(find . -maxdepth 1 -type f -printf '%T@ %i\n' |
sort -n | head -n 1)
# now $1 is the timestamp and $2 is the inode

oldest_filename=$(find . -maxdepth 1 -inum "$2")
age_in_minutes=$(date +%s | awk -v d="$1" '{ print ($1 - d) / 60 }')

关于Linux Shell - 字符串操作然后以分钟为单位计算文件的年龄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16661921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com