Список файлов по дате последнего редактирования

104

У меня есть каталог: /home/user/

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

Марти
источник

Ответы:

172

Ты можешь использовать:

ls -Rt

где -Rозначает рекурсивный (включая подкаталоги) и -tозначает «сортировку по дате последнего изменения».


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

ls -l -Rt

Для этого также можно создать псевдоним:

alias lt='ls -lht'
lt

Где -hдает более читаемый результат.

мипади
источник
16
Спасибо, отлично. Я также добавил туда -l, чтобы я мог видеть даты, поэтому для тех, кто ищет это позже, это- $ ls -lRt
Марти
4
Если вы делаете это в командной строке и хотите увидеть самые последние измененные файлы, подумайте ls -lrt[RhA]. -rпорядок сортировки меняется на обратный, оставляя недавно отредактированные материалы внизу списка ...
dmckee --- котенок экс-модератора
Это добавлено к, -ilaдает вам практически всю информацию, которая вам может понадобиться. $ ls -ilaRt
Falkenfighter
Я расширил этот ответ, потому что использование ll -Rtбыло для меня идеальным решением, поскольку мне нужно было видеть файлы по дате последнего изменения. Это может быть полезно другим.
Mus
@MusTheDataGuy llне существует и не является командой. В основном это псевдоним в оболочке bash, но не определен в большинстве / some /? дистрибутивы linux. Некоторые определяют его как alias ll='ls -l'/etc/bash.bashrc или /etc/.bashrc. Таким образом, он может не работать и может не существовать в системе OP. Используйте, ls -l -Rtпо крайней мере, lsстандартную команду, определенную posix. Или укажите, что вы имели в виду alias ll='ls -l'; ll -Rt.
KamilCuk
73

Если вам нужен главный список, в котором все файлы отсортированы по дате изменения, показывая каталог, в котором они находятся, но не сгруппированы по каталогам , вы можете использовать это:

find . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '

Результат выглядит примерно так ls -l:

-rw-r - r-- 1 root root 3892 11.08.2009 11:03:36 /usr/share/man/man1/xmllint.1.gz
-rw-r - r-- 1 root root 22946 13.08.2009 11:59:20 /usr/share/man/man1/curl.1.gz
-rw-r - r-- 1 root root 728 17.08.2009 12:06:33 /usr/share/man/man1/thunderbird.1.gz
-rw-r - r-- 1 root root 873 18.08.2009 10:52:47 /usr/share/man/man1/libgnutls-config.1.gz
-rw-r - r-- 1 root root 2552 19.08.2009 02:00:34 /usr/share/man/man3/Purple.3pm.gz
-rw-r - r-- 1 root root 9546 19.08.2009 02:02:00 /usr/share/man/man1/pidgin.1.gz
-rw-r - r-- 1 root root 2201 19.08.2009 02:02:46 /usr/share/man/man3/Pidgin.3pm.gz
-rw-r - r-- 1 root root 926 19.08.2009 02:03:05 /usr/share/man/man1/purple-remote.1.gz
-rw-r - r-- 1 root root 18052 19.08.2009 04:11:47 /usr/share/man/man1/mono.1.gz
-rw-r - r-- 1 root root 1845 19.08.2009 04:11:47 /usr/share/man/man5/mono-config.5.gz

Mac OS X

Для тех из вас, кто использует Mac OS X, опция -printf недоступна в поиске BSD (вы получите эту ошибку :)find: -printf: unknown primary or operator . К счастью, вы можете установить GNU find через Homebrew (также должна быть опция для Fink и Macports ):

brew install findutils

После его установки находка GNU должна быть доступна вам как gfind. Итак, все, что вам нужно сделать, это изменить строку выше на:

gfind . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '
Приостановлено до дальнейшего уведомления.
источник
3
Хороший. Вся группировка каталогов с ls -R раздражает.
Эль Йобо
1
Отличный код, скрипту потребовалось ок. 5 секунд, чтобы отсортировать и распечатать 13k фотографий во многих разных папках (через Cygwin на довольно медленном компьютере).
Магнус
О, это потрясающе. Для людей (таких как я), не столь знакомых, findкак автор, эти аргументы -printfявляются директивами формата, которые можно найти в man find(найдите пятый экземпляр printfна этой странице).
Оуэн Блэкер
4
Для тех, кто хочет использовать это в MacOS, но не хочет утруждать себя установкой findutils: find . -type f -print0 | xargs -0 stat -f "%m %Sp %l %-8Su %-8Sg %8z %Sm %N" | sort | cut -f 2- -d' 'даст вам примерно такой же результат в MacOS, используя только встроенные утилиты
Jaymon
sort -r, чтобы отменить сортировку и разместить наверху самые последние измененные файлы.
maryisdead
0

MAC OSX 2019

Если вам все равно, в какое время он был создан, но вы хотите отсортировать список, используйте эту команду

==> ls -t

Если вы хотите заказать и увидеть дату и информацию о пользователе, используйте эту команду

===> ls -lt

Мусса Чарльз
источник
0

Для zshпользователей вы также можете использовать квалификаторы glob (также задокументированные man zshexpn):

echo *(om)

Где oозначает порядок сортировки, вверх и mозначает время последней модификации .

Это может быть полезно при использовании в цикле for или другой команде:

for file in *(^om); do
  [ -e "$file" ] || continue
  # do something with file orderer from least recently modified to last modified
done

Или связан с другим квалификатором глобуса:

last_modified_file=(*(om[1]))
Ulysse BN
источник