Как я могу перечислить (ls) 5 последних измененных файлов в каталоге?

Я знаю, что ls -t перечислит все файлы по времени изменения. Но как я могу ограничить эти результаты только последними n файлами?


person Ryan    schedule 28.03.2013    source источник
comment
Обратный порядок ls -lrt может кому-то помочь.   -  person PJ Brunet    schedule 12.01.2015
comment
Люблю это @PJBrunet. У меня выработалась привычка всегда жить с tharl, так как у него есть все, что мне нужно.   -  person Adam Grant    schedule 15.02.2018


Ответы (5)


Попробуйте использовать голову или хвост. Если вам нужны 5 последних измененных файлов:

ls -1t | head -5

-1 (это единица) говорит, что один файл в строке, а голова говорит, что нужно взять первые 5 записей.

Если вы хотите последние 5 попыток

ls -1t | tail -5
person Paul Rubel    schedule 28.03.2013
comment
Если я не ошибаюсь, оболочка представляет вывод ls в нескольких столбцах, но вывод ls передается следующей команде с 1 файлом/каталогом за раз - person Alex; 29.03.2013
comment
Это игнорирует Total вверху: ls -1t | head -n 6 | tail -n 5 - person Ryan; 29.03.2013
comment
Я не вижу всего, но если он есть, это, безусловно, сработает. - person Paul Rubel; 29.03.2013

В принятом ответе перечислены только имена файлов, но для получения 5 лучших файлов также можно использовать:

ls -lht | head -6

куда:

-l выводит в виде списка

-h делает выходные данные удобочитаемыми для человека (т. е. размеры файлов отображаются в килобайтах, мегабайтах и ​​т. д.)

-t сортирует вывод, помещая последний измененный файл первым

head -6 покажет 5 файлов, потому что ls печатает размер блока в первой строке вывода.

Я думаю, что это немного более элегантный и, возможно, более полезный подход.

Пример вывода:

total 26960312 -rw-r--r--@ 1 user staff 1.2K 11 Jan 11:22 phone2.7.py -rw-r--r--@ 1 user staff 2.7M 10 Jan 15:26 03-cookies-1.pdf -rw-r--r--@ 1 user staff 9.2M 9 Jan 16:21 Wk1_sem.pdf -rw-r--r--@ 1 user staff 502K 8 Jan 10:20 lab-01.pdf -rw-rw-rw-@ 1 user staff 2.0M 5 Jan 22:06 0410-1.wmv

person samisnotinsane    schedule 11.01.2018

Используйте команду tail:

ls -t | tail -n 5
person Alex    schedule 28.03.2013
comment
Это дает 5 самых старых. Вам нужно изменить сортировку ( ls -tr ) или использовать head вместо tail, чтобы получить 5 самых новых. - person Headbank; 03.01.2020

По умолчанию ls -t сортирует вывод от самого нового к самому старому, поэтому используемая комбинация команд зависит от того, в каком направлении вы хотите упорядочить вывод.

Для самых новых 5 файлов, упорядоченных от самого нового к самому старому, используйте head, чтобы взять первые 5 строк вывода:

ls -t | head -n 5

Для 5 новейших файлов, упорядоченных от самого старого к самому новому, используйте переключатель -r, чтобы изменить порядок сортировки ls, и используйте tail, чтобы взять последние 5 строк вывода:

ls -tr | tail -n 5
person Headbank    schedule 03.01.2020

ls -t список файлов по времени создания, а не по времени последнего изменения. Используйте ls -ltc, если вы хотите отобразить файлы по времени последнего изменения от последнего к первому (сверху вниз). Таким образом, чтобы перечислить последние n: ls -ltc | head ${n}

person victrr    schedule 25.08.2016
comment
Какую платформу/версию вы имеете в виду? Можете дать ссылку? Глядя на справочную страницу Linux, вы получите противоположное тому, что вы заявляете: -t sort by modification time, newest first - person Joma; 09.09.2016