Как найти последние 10 измененных файлов?

Как найти последние 10 измененных файлов?

Я в корневой папке и мне нужно найти последние 10 измененных файлов только этой папки. Каждый раз, когда я ставлю -mtime, как сказал мой лектор, я получаю 10 дней. Мне нужны последние 10 измененных файлов, а не последние 10 дней. Я пробовал find -my time, my time передано с tail. Я получаю длинный список всех измененных файлов за последние 10 дней. Мне нужны только последние 10 измененных файлов корневого каталога.

решение1

ls -t | headдолжно работать, если имена файлов не содержат символов новой строки.

ls -tсортирует по времени, начиная с новых файлов. headсохраняет только первые 10 строк.

Если вам нужны более подробные данные, вы можете использовать ls -lt, но это добавит дополнительную строку с общим размером, поэтому вам нужно ls -lt | head -n 11.

Если вы хотите включить скрытые файлы, вы можете использовать ls -At | head. ( ls -Aили --almost-allдля GNU ls, включает скрытые файлы, за исключением .и ...)

Обратите внимание, что это дает вам последние 10 файлов любого типа, включая каталоги, а не только обычные файлы.

решение2

В zsh, для 10 обычных файлов в текущем рабочем каталоге или ниже, которые были изменены последними:

ls -ldt -- **/*(D.om[1,10])

В других оболочках, но при условии, что вы используете последнюю версию системы GNU:

find . -type f -printf '%T@:%P\0' |
  LC_ALL=C sort -zrn |
  LC_ALL=C sed -z 's/^[^:]*://;10q' |
  xargs -r0 ls -ltd --

Если вы не хотите учитывать файлы в подкаталогах, удалите in **/или zshдобавьте -maxdepth 1to findпосле ..

Чтобы исключить скрытые файлы, удалите Dспецификатор glob в zshили измените findстроку на:

LC_ALL=C find . -name '.?*' -prune -o -type f -printf '%T@:%P\0' |

Или, если также исключить файлы в подкаталогах:

LC_ALL=C find . -maxdepth 1 ! -name '.*' -type f -printf '%T@:%P\0' |

Они не делают никаких предположений о том, какие символы или несимволы могут содержать пути к файлам.

Связанный контент