是否有一个选项(最好是 GNU 和/或 FreeBSD 选项)指示ls
显示修改时间,而不是绝对日期时间,而是显示一个指示自修改以来的小时(或天)的数字?
答案1
我不知道有什么方法可以ls
做你想做的事。根据您要寻找的内容,您可以构建一个展示该行为的脚本。
这将是一个很多ls
除了这种行为之外,要获得所有附加功能,还需要花费大量的工作,但是您可以得到只是这种行为很容易。
这是此类脚本的一个简单示例:
#!/bin/bash
function age() {
local -r last_modification="${1}"
local -r now="$(date +%s)"
local -r seconds="$((now - last_modification))"
if [[ ${seconds} -lt 60 ]]; then
printf "%s seconds ago" "${seconds}"
return
fi
local -r minutes="$((seconds / 60))"
if [[ ${minutes} -lt 60 ]]; then
printf "%s minutes ago" "${minutes}"
return
fi
local -r hours="$((minutes / 60))"
if [[ ${hours} -lt 24 ]]; then
printf "%s hours ago" "${hours}"
return
fi
local -r days="$((hours / 24))"
if [[ ${days} -lt 365 ]]; then
printf "%s days ago" "${days}"
return
fi
local -r years="$((days / 365))"
printf "%s years ago" "${years}"
}
function list_file() {
local -r target_file="${1}"
local -r last_modification="$(stat --format=%Y "${target_file}")"
stat --format="%A %2h %-8U %-8G %5s $(printf "%-14s" "$(age "${last_modification}")") %n" "${target_file}"
}
if [[ $# -eq 0 ]]; then
for i in * .*; do
list_file "${i}"
done
else
for i; do
list_file "${i}"
done
fi
这是一个示例运行:
$ myls
-rw------- 1 user group 9061 3 days ago .bash_history
-rw-r--r-- 1 user group 127 2 years ago .bash_logout
-rw-r--r-- 1 user group 611 1 years ago .bashrc
drwxr-xr-x 4 user group 4096 155 days ago .cache
-rw------- 1 user group 40583 5 hours ago .histfile
-rw------- 1 user group 703 1 minutes ago .lesshst
...
$
$ myls myls
-rwxr-xr-x 1 user group 1127 2 minutes ago myls
$
如果您给脚本参数,那么它将列出这些参数,否则它将列出当前目录的内容。
它用于stat
获取呈现的传统字段ls
。它不显示日期,而是使用该age
函数打印“友好的,x 个时间单位前”字符串。该功能可以增强,具体取决于您具体想要看到的内容。