Список новейших файлов по типу (.txt) после рекурсивного поиска в терминале

Я пытаюсь заставить свой терминал вернуть последний файл .txt с неповрежденным путем. Я исследовал ls, grep, find и tail, используя '|' возможность передачи результатов от одной утилиты к другой. Конечным результатом будет рабочий путь + результат, который я мог бы передать своему текстовому редактору.

Я был близок к таким тестам: find . | grep '.txt$' | хвост -1

.. но мне не повезло, что grep возвращает самый новый файл - есть ли флаг, который мне не хватает?

Попытка использовать find & ls тоже не совсем работает:

найти . -имя "*.txt" | лс-лрт

.. ls возвращает текущие каталоги вместо результатов моего запроса на поиск.

Пожалуйста помоги!


person i4n    schedule 10.06.2011    source источник


Ответы (4)


Ты так близко.

vi "$(find . -name '*.txt' -exec ls -t {} + | head -1)"
person Chris Jester-Young    schedule 10.06.2011

Если у вас bash4+

ls -t ./**/*.txt | head -1

отредактируйте последний текстовый файл

vim $(ls -t ./**/*.txt |head -1)

ps: необходимо включить shopt -s globstar в вашем .bashrc или .profile...

person jm666    schedule 10.06.2011

Вы можете использовать функцию статистики, чтобы распечатать каждый файл только с последним временем модификации и именем.

найти . -name "*.txt" -exec stat -c "%m %N" {} \; | Сортировать

person sstendal    schedule 10.06.2011

person    schedule
comment
К сожалению, ваш взорвется, если у вас есть файлы и/или каталоги с символами новой строки в их именах. Необычно, я знаю, но полностью надежное решение должно справиться с этим. В остальном не плохое решение. - person Chris Jester-Young; 10.06.2011
comment
@Chris: Верно… но почему ты выделил меня? Это верно для любого другого решения, поскольку все они используют голову или сортировку. С сортировкой можно справиться, но для работы с головкой требуется Perl или, возможно, awk. - person Seth Robertson; 11.06.2011
comment
Наверное, потому что ваш ответ один из первых. Обычно я играю по правилам «Самое быстрое ружье на западе», а это значит, что если вы не первый автор (или ваш пост не в пределах минуты или двух от первого автора), обычно это не засчитывается. (Конечно, если это действительно инновационный ответ.) - person Chris Jester-Young; 11.06.2011