Существует чистый и надежный способ sort | head
по дате:
Использование ls -l
для красивой печати
find . ! -type d -printf "%T@ %p\0" |
sort -zrn |
head -zn 10 |
sed -z 's/^[0-9.]\+ //' |
xargs -0 ls -lt
В качестве функции bash :
findByDate() {
local humansize=''
[ "$1" = "-h" ] && humansize='h' && shift
find . ${2:-! -type d} -printf "%T@ %p\0" |
sort -zrn |
head -zn ${1:--0} |
sed -z 's/^[0-9.]\+ //' |
xargs -0 ls -dlt${humansize}
}
Это может быть выполнено с одним или двумя аргументами или даже без:
Usage: findByDate [-h] [lines] [find options]
Образец:
findByDate
Перечислите все не каталоги, отсортированные по дате. Nota:
Даже в большом дереве файловой системы, как и в случае xargs
уже отсортированного списка, порядок файлов остается правильным, даже если его ls
нужно запускать много раз.
findByDate -h 12
Перечислите еще 12 последних не-каталогов, отсортированных по дате, с размером, напечатанным в удобочитаемой форме.
findByDate 42 '-type l'
Перечислим еще 42 последние ссылки
findByDate -0 '( -type l -o -type b -o -type s -o -type c )'
Будут перечислены все символические ссылки, блочные устройства, сокеты и символы устройств, отсортированные по дате.
Инвертирующий порядок
Замена head
на tail
и изменить переключатель sort
и ls
:
findByDate() {
local humansize=''
[ "$1" = "-h" ] && humansize='h' && shift
find . ${2:-! -type d} -printf "%T@ %p\0" |
sort -zn |
tail -zn ${1:-+0} |
sed -z 's/^[0-9.]\+ //' |
xargs -0 ls -dltr${humansize}
}
Та же функция, то же использование:
Usage: findByDate [-h] [lines] [find options]