Saya ingin mencari usia file tertua di direktori tertentu atau mengembalikan 0 jika tidak ada file di direktori ini. Saya juga membutuhkan perintah satu baris untuk melakukannya. Sejauh ini ini adalah perintah saya untuk menemukan usia dalam detik dari file tertua di direktori:
expr $(($(date +%s) - $(stat -c %Y $(ls -lt /path/to/dir/ | tail -1 | awk '{print $NF}'))))
Masalahnya adalah jika tidak ada file, itu mengembalikan kesalahan berikut:
$ expr $(($(date +%s) - $(stat -c %Y $(ls -lt /path/to/dir/ | tail -1 | awk '{print $NF}'))))
stat: cannot stat ‘0’: No such file or directory
-bash: 1554373460 - : syntax error: operand expected (error token is "- ")
Jadi dalam hal ini saya ingin perintah untuk mengembalikan hanya 0 dan untuk menekan cetakan kesalahan.
Jawaban yang Diterima:
Jika harus satu baris:
stat -c %Y ./* 2>/dev/null | awk -v d="$(date +%s)" 'BEGIN {m=d} $0 < m {m = $0} END {print d - m}'
stat -c %Y ./* 2>/dev/null
cetak stempel waktu semua file, abaikan kesalahan (jadi tidak ada file yang tidak menghasilkan apa-apa)-
Dengan awk:
-v d="$(date +%s)"
simpan stempel waktu saat ini dalam variabeld
BEGIN {m=d}
inisialisasim
ked
$0 < m {m = $0}
melacak minimum dalamm
END {print d - m}
cetak perbedaannya.