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

138

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

Райан
источник
10
Обратный порядок ls -lrtможет помочь кому-то.
Пи Джей Брюнет
Люблю это @PJBrunet. У меня сформировалась привычка всегда жить с tharlней, так как она имеет все, что мне нужно.
Адам Грант

Ответы:

246

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

ls -1t | head -5

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

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

ls -1t | tail -5
Пол Рубел
источник
2
Если я не ошибаюсь, оболочка представляет выходные данные lsв нескольких столбцах, но выходные данные lsпередаются по следующей команде с 1 файлом / dir за раз
Alex
похоже, так оно и есть. Хорошее упрощение.
Пол Рубел
3
Это игнорирует итог наверху:ls -1t | head -n 6 | tail -n 5
Райан
1
Я не вижу общего, но если есть тот, который, безусловно, будет работать.
Пол Рубел
18

В принятом ответе перечислены только имена файлов, но для получения 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

samisnotinsane
источник
12

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

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

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

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

ls -t | head -n 5

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

ls -tr | tail -n 5
Headbank
источник
1

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

victrr
источник
1
На какую платформу / версию вы ссылаетесь? Можете ли вы предоставить ссылку? Глядя на man-страницу linux, вы получаете противоположное тому, что вы заявляете: -t sort by modification time, newest first
Joma