Проблемы с паролем шифрования Немецко-английская раскладка клавиатуры

EDIT: Я думаю, этот пост не «не очень полезен», как я и думал. Это действительно быстрое решение, которое просто отслеживает последний измененный файл (вместо сортировки всего списка файлов):

find . -type f -printf '%T@ %p\n' | awk 'BEGIN { mostrecenttime = 0; mostrecentline = "nothing"; } { if ($1 > mostrecenttime) { mostrecenttime = $1; mostrecentline = $0; } } END { print mostrecentline; }' | cut -f2- -d ' '

Распространение на несколько строк для ясности он выглядит следующим образом:

find . -type f -printf '%T@ %p\n' | awk '
    BEGIN { mostrecenttime = 0; mostrecentline = "nothing"; }
    {
        if ($1 > mostrecenttime)
            { mostrecenttime = $1; mostrecentline = $0; }
    }
    END { print mostrecentline; }' | cut -f2- -d ' '

Конец EDIT

Не особенно полезный пост, но так как «устраивать» обсуждали скорость, я думал, d).

Решения аранжировки и enzotib включают перечисление всех файлов внутри каталога с их mtimes, а затем сортировку. Как вы знаете, сортировка не нужна, чтобы найти максимум. Найти максимум можно в линейном времени, но сортировка занимает n log (n) time [Я знаю, что разница не много, но все же;)]. Я не могу придумать аккуратный способ реализации этого. [EDIT: опрятная (хотя и грязно выглядящая) и быстрая реализация, предусмотренная выше.]

Следующее лучшее - найти самый последний отредактированный файл в каталоге, рекурсивно найти последний отредактированный файл на каждом уровне 1 подкаталог. Пусть этот файл представляет собой подкаталог. Теперь отсортируйте файлы уровня 1 вместе с представителями подкаталогов уровня 1. Если число файлов и поддиректоров уровня 1 каждого каталога почти равно константе, то этот процесс должен масштабироваться линейно с общим количеством файлов.

Это то, что я придумал для реализации этого :

findrecent() { { find "$1" -maxdepth 1 -type f -exec stat -c "%y %n" {} + | sort -r | head -1 && find "$1" -mindepth 1 -maxdepth 1 -type d -exec findrecent {} \;; } | sort -r | head -1; }
findrecent .

Я запустил это и получил кучу ошибок find: findrecent: No such file or directory. Причина: -exec find работает в другой оболочке. Я попытался определить findrecent в .bashrc, .xsessionrc, но это не помогло [я буду признателен за помощь здесь]. В конце я прибегал к установке

#!/bin/bash
{ find "$1" -maxdepth 1 -type f -exec stat -c "%y %n" {} + | sort -r | head -1 && find "$1" -mindepth 1 -maxdepth 1 -type d -exec findrecent {} \;; } | sort -r | head -1;

в скрипте под названием findrecent в моем PATH и затем его запуске.

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

#!/bin/bash
echo "$1" >&2
{ find "$1" -maxdepth 1 -type f -exec stat -c "%y %n" {} + | sort -r | head -1 && find "$1" -mindepth 1 -maxdepth 1 -type d -exec findrecent {} \;; } | sort -r | head -1;

и попытался снова.

Так много для превосходства O (n) по сравнению с O (n log (n)), но это заняло 1 минуту 35 секунд в моей домашней папке - решения arr и enzotib заняли 1,69, 1,95 секунды! )! Черт побери! [Или, скорее, накладные расходы на скрипт]

Но этот скрипт действительно масштабируется лучше, чем предыдущие, и я уверен, что он будет работать быстрее, чем в банке памяти Google, D

0
задан 11 February 2018 в 13:37

0 ответов

Другие вопросы по тегам:

Похожие вопросы: