Я в корневой папке и мне нужно найти последние 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 1
to 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' |
Они не делают никаких предположений о том, какие символы или несимволы могут содержать пути к файлам.