Ls

長列表顯示修改後的小時數

  • July 10, 2020

是否有一個選項(最好是 GNU 和/或 FreeBSD 選項)指示ls顯示修改時間,而不是顯示修改時間,而不是顯示修改後的小時數(或天數)?

我不知道有一種方法可以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 單位時間前”字元串。該功能可以增強,具體取決於您希望看到的具體內容。

引用自:https://unix.stackexchange.com/questions/597675