Ищите команду, которая вернет самый последний файл в каталоге.
Не вижу предельного параметра для ls
...
linux
command-line
извед
источник
источник
watch -n1 'ls -Art | tail -n 1'
- показывает самые последние файлыls
или используютfind
без него,-print0
что проблематично для обработки назойливых имен файлов. Всегда полезно упомянуть: BashFAQ099, который дает POSIX-ответ на эту проблемуОтветы:
Не очень элегантно, но это работает.
источник
ls
totail
, затем печатает только последнюю строку. ИМХО, лучше отсортировать в порядке возрастания и использоватьhead
вместо этого, какchaos
предлагается. После печати первой строки заголовок завершается, поэтому отправка следующей строки (фактически следующего блока) вызовет SIGPIPE иls
также завершится.Эта команда фактически дает последний измененный файл в текущем рабочем каталоге.
источник
ls -tl | head -n 1
, и не нужно проталкивать всю таблицу через канал, как это делает моя.ls -t *.png | head -n1
ls -Art | head -n1
если вам нужен последний измененный файлЭто рекурсивная версия (т. Е. Она находит последний обновленный файл в определенном каталоге или любом из его подкаталога)
Изменить: использовать
-f 2-
вместо того,-f 2
что предложено Кевиномисточник
find $DIR -type f -exec stat -lt "%Y-%m-%d" {} \+ | cut -d' ' -f6- | sort -n | tail -1
sort -nr
, вы можете использоватьhead -n 1
вместоtail -n 1
и немного повысить эффективность. (Хотя, если вы сортируете рекурсивную находку, получение первой или последней строки не будет медленной частью.)find ./ -type f -printf "%T@ %p\n" -ls | sort -n | cut -d' ' -f 2- | tail -n 1 | xargs -r ls -lah
find $DIR -type f -exec stat -lt "%F %T" {} \+ | cut -d' ' -f6- | sort -n | tail -1
Примечание о надежности:
Поскольку символ перевода строки является таким же допустимым, как и любой в имени файла, любое решение, основанное на строках, подобных
head
/tail
based, имеет недостатки.В GNU
ls
другой вариант заключается в использовании--quoting-style=shell-always
параметра иbash
массива:(добавьте
-A
опцию,ls
если вы также хотите рассмотреть скрытые файлы).Если вы хотите ограничить обычные файлы (не обращая внимания на каталоги, fifo, устройства, символические ссылки, сокеты ...), вам нужно прибегнуть к GNU
find
.С bash 4.4 или новее (для
readarray -d
) и GNU coreutils 8.25 или новее (дляcut -z
):Или рекурсивно:
Лучше всего было бы использовать
zsh
и его глобальные квалификаторы вместо того,bash
чтобы избежать всех этих хлопот:Самый новый обычный файл в текущем каталоге:
В том числе скрытые:
Второй новейший:
Проверьте возраст файла после разрешения символической ссылки:
Рекурсивный:
Кроме того, с
compinit
включенной системой завершения ( и со), Ctrl+Xmстановится завершителем, который расширяется до новейшего файла.Так:
Заставит вас отредактировать новейший файл (вы также получите возможность увидеть, какой именно файл, прежде чем нажать Return).
Для второго новейшего файла.
для новейшего
c
файла.для самого нового обычного файла (не каталога, не fifo / device ...) и т. д.
источник
zsh
советы. Не могли бы вы предоставить ссылку на более подробную информацию об этом в zsh docs?info zsh qualifiers
Я использую:
ls -ABrt1 --group-directories-first | tail -n1
Это дает мне только имя файла, исключая папки.
источник
ls -lAtr | tail -1
Другие решения не включают файлы, которые начинаются с
'.'
.Эта команда также включает
'.'
и'..'
, что может или не может быть тем, что вы хотите:ls -latr | tail -1
источник
Сокращенный вариант, основанный на ответе dmckee:
источник
-1
синтаксис для заголовка устарел довольно давно, и его-n 1
следует использовать.Мне нравится
echo *(om[1])
(zsh
синтаксис), поскольку он просто дает имя файла и не вызывает никакой другой команды.источник
Решение поиска / сортировки прекрасно работает до тех пор, пока количество файлов не станет действительно большим (как целая файловая система). Вместо этого используйте awk, чтобы отслеживать самый последний файл:
источник
Лично я предпочитаю использовать как можно меньше не встроенных
bash
команд (чтобы уменьшить количество дорогих системных вызовов fork и exec). Для сортировки по датеls
нужно позвонить. Но использованиеhead
не действительно необходимо. Я использую следующий однострочный (работает только на системах, поддерживающих именные каналы):или получить имя самого старого файла
(Запомните пространство между двумя знаками «<»!)
Если также нужны скрытые файлы, можно добавить аргумент.
Я надеюсь, что это может помочь.
источник
используя рекурсивную опцию R .. вы можете рассмотреть это как улучшение для хороших ответов здесь
источник
Покажет последний измененный элемент в папке. Соединитесь с,
grep
чтобы найти последние записи с ключевыми словамиисточник
1
для первой строки эквивалентно тому,head -n 1
что q?Рекурсивный:
источник
попробуйте эту простую команду
Если вам нужно имя файла - последнее изменение, путь = /ab/cd/*.log
Если вы хотите имя каталога - последнее изменение, путь = / ab / cd / * /
источник
Предполагая, что вам нет дела до скрытых файлов, которые начинаются с
.
В противном случае
источник
Только со встроенными Bash, близко следуя BashFAQ / 003 :
источник
Все эти Ls / хвост решение работает прекрасно для файлов в каталоге - игнорирование подкаталоги.
Чтобы включить все файлы в ваш поиск (рекурсивно), можно найти. gioele предложила отсортировать форматированный вывод find. Но будьте осторожны с пробелами (его предложение не работает с пробелами).
Это должно работать со всеми именами файлов:
Это сортирует по mtime, см. Человек найти:
Так просто заменить
%T
с ,%C
чтобы сортировать по CTime.источник
find $DIR -type f -printf "%T@ %p\n" | sort -n | cut -d' ' -f 2- | tail -n 1
Или, альтернативно, оставьте все, кроме первого поля:find $DIR -type f -printf "%T@ %p\n" | sort -n | cut -d' ' -f 1 --complement | tail -n 1
Нахождение самого последнего файла в каждом каталоге в соответствии с шаблоном, например, подкаталоги рабочего каталога, имена которых заканчиваются на «tmp» (без учета регистра):
источник
источник
Если вы хотите получить самый последний измененный файл, включая любые подкаталоги, вы можете сделать это с помощью этого небольшого oneliner:
Если вы хотите сделать то же самое не для измененных файлов, а для файлов, к которым вы получили доступ, вам просто нужно изменить
% Y параметра из стат команды к % X . И ваша команда для самых последних доступных файлов выглядит так:
Для обеих команд вы также можете изменить параметр var = "1", если хотите указать более одного файла.
источник
Мне тоже нужно было это сделать, и я нашел эти команды. эти работы для меня:
Если вы хотите последний файл по дате его создания в папке (время доступа):
И если вы хотите последний файл, который имеет изменения в его содержании (изменить время):
источник