Linux sort сортировка по дате

Как найти и отсортировать файлы по дате и времени модификации в Linux

Обычно у нас есть привычка сохранять много информации в виде файлов в нашей системе. Некоторые, скрытые файлы, некоторые хранятся в отдельной папке, созданной для простоты понимания, а некоторые как есть. Но все это заполняет наши каталоги; обычно настольный, что делает его похожим на беспорядок. Но проблема возникает, когда нам нужно найти конкретный файл, измененный в определенную дату и время в этой огромной коллекции.

Люди, знакомые с графическим интерфейсом пользователя, могут найти его с помощью диспетчера файлов, который перечисляет файлы в формате длинного списка, что позволяет легко понять, что мы хотели, но те пользователи, у которых есть привычка к черным экранам, или даже любой, кто работает на серверах, которые лишены графического интерфейса, будут нужна простая команда или набор команд, которые могли бы облегчить их поиск.

Настоящая красота Linux проявляется здесь, поскольку в Linux есть набор команд, которые при использовании по отдельности или вместе могут помочь в поиске файла или сортировке коллекции файлов по их имени, дате модификации, времени создания или даже любому другому. фильтр, который вы могли бы подумать о применении, чтобы получить свой результат.

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

Утилиты Linux для сортировки файлов в Linux

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

ls — перечисление содержимого каталога, эта утилита может отображать файлы и каталоги и даже может отображать всю информацию о их статусе, включая дату и время изменения или доступа, разрешения, размер, владельца, группу и т. д.

Мы уже рассмотрели множество статей о команде Linux ls и команде sort, вы можете найти их ниже:

  1. Изучите команду ls на 15 основных примерах
  2. Изучите 7 команд Advanced ls с примерами
  3. 15 полезных вопросов для собеседования по команде ls в Linux

sort — эту команду можно использовать для сортировки результатов любого поиска по любому полю или любому конкретному столбцу поля.

Мы уже рассмотрели две статьи о команде сортировки Linux, вы можете найти их ниже:

  1. 14 примеров команд «sort» в Linux — часть 1
  2. 7 полезных примеров команд Linux «sort» — часть 2

Эти команды сами по себе являются очень мощными командами, которые нужно освоить, если вы работаете на черных экранах и имеете дело с большим количеством файлов, просто чтобы получить тот, который вам нужен.

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

Ниже приведен список команд для сортировки по дате и времени.

Приведенная ниже команда перечисляет файлы в формате длинного списка и сортирует файлы по времени модификации, начиная с самых новых. Для сортировки в обратном порядке используйте переключатель -r с этой командой.

Список файлов в каталоге на основе времени последнего доступа, т.е. на основе времени последнего доступа к файлу, а не изменения.

Список файлов в каталоге на основе времени последнего изменения информации о статусе файла или ctime . Эта команда сначала перечислит тот файл, любая информация о статусе которого, такая как: владелец, группа, разрешения, размер и т. Д., Была недавно изменена.

Если переключатель -a используется с вышеуказанными командами, они могут перечислять и сортировать даже скрытые файлы в текущем каталоге, а переключатель -r выводит вывод в обратном порядке.

Однако для более глубокой сортировки, такой как сортировка в выводе команды find, также можно использовать ls , но там sort оказывается более полезным, поскольку вывод может содержать не только файл имя, но любые поля по желанию пользователя.

Команды ниже показывают использование sort с командой find для сортировки списка файлов по дате и времени.

Чтобы узнать больше о команде find, перейдите по этой ссылке: 35 практических примеров команды find в Linux

Здесь мы используем команду find , чтобы найти все файлы в корневом каталоге (‘/’) , а затем распечатать результат как: месяц, в котором был осуществлен доступ к файлу, а затем имя файла. Из этого полного результата мы перечисляем 11 лучших записей.

Приведенная ниже команда сортирует вывод с использованием ключа в качестве первого поля, указанного в -k1 , а затем сортирует по месяцу, указанному перед ним M .

Здесь мы снова используем команду find , чтобы найти все файлы в корневом каталоге, но теперь мы распечатаем результат в виде: последней даты доступа к файлу, последнего доступа к файлу и затем имени файла. Из этого мы выберем 11 лучших записей.

Читайте также:  Adguard для сафари mac os

Приведенная ниже команда сортировки сначала выполняет сортировку на основе последней цифры года, затем сортировку на основе последней цифры месяца в обратном порядке и, наконец, сортировку на основе первого поля. Здесь «1.8» означает 8-й столбец первого поля, а «n» перед ним означает числовую сортировку, а «r» указывает сортировку в обратном порядке.

Здесь мы снова используем команду find , чтобы вывести список из 11 файлов в корневом каталоге и распечатать результат в формате: время последнего обращения к файлу и затем имя файла.

Приведенная ниже команда сортирует вывод на основе первого столбца первого поля вывода, который является первой цифрой часа.

Эта команда сортирует вывод команды ls -l на основе 6-го поля по месяцам, а затем на основе 7-го поля, которое является датой, численно.

Заключение

Точно так же, обладая некоторыми знаниями о команде сортировки, вы можете отсортировать практически любой список на основе любого поля и даже любого столбца, который вам нужен. Это были некоторые приемы, которые помогут вам сортировать файлы по дате или времени. На их основе вы можете создавать свои собственные трюки. Однако, если у вас есть другой интересный трюк, вы всегда можете упомянуть об этом в своих комментариях.

Источник

Сортировка даты в файле

Здравствуйте! Помогите, пожалуйста, со скриптом. Есть следующая задача.
Дан файл с датами «dd.mm.yyyy 24h:mi:ss» — колонка дат. Найти минимальную, максимальную даты и разницу между ними в секундах. Можно считать, что все даты не менее 01.12.2006 00:00:00. Написал shell-скрипт для сортировки:

Однако он правильно сортирует только дату, а время неверно. Подскажите, пожалуйста, как правильно отсортировать время. Кусок файла с датами:

  • 09.12.2006 17:50:08
  • 06.12.2006 14:07:16
  • 06.12.2006 22:33:22
  • 08.12.2006 16:05:47
  • 06.12.2006 12:21:12
  • 08.12.2006 6:15:22
  • 07.12.2006 4:07:12
  • 09.12.2006 2:14:10
  • 06.12.2006 11:28:09
  • 09.12.2006 16:29:40
  • 06.12.2006 22:31:00
  • 06.12.2006 12:00:31
  • 08.12.2006 16:29:51

Откройте форму добавления сообщения в тему и почитайте то, что написано в нижней части формы после слова «Внимание:».

Неужели так сложно просмотреть что ты видишь, прочитать и выполнить?

Вашу «кашу» никто читать не будет, оформите шапку темы правильно.

sort и так отсортирует так, как надо, без дополнительных параметров ‘-k . ‘, к тому же хорошо бы, если бы год стоял первым, потом был месяц и в конце день, а потом уже время.

ну а далее просто срезайте посредством tail и head первую и последнюю строку и обрабатывайте их.

Но всё же оформляйте тему правильно в соответствие с разметкой форума, как её узнать я вам уже указал.

Проблема в том, что команда sort сортирует только дату, но не время.
Как правильно отсортировать еще и по времени?

Посмотрите в моём примере есть две строки с одинаковой датой и разным временем, сортировка произошла.

Поскольку только начал изучать unix, то подскажите, что в вашем примере означает tst?

Текстовый файл со строками, на каждой строке отдельная запись.

Переведи все даты в секунды, man date, и сортируй как числа, man sort.

Да оно и так нормально сортируется. Если конечно у ТС такой формат строк как в моём примере.

По секундам лучше, тс хотел ведь ещё разницу считать. Если время в сек, то просто вычитание. Ну и таймзона может мешать.

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

Источник

Linux sort сортировка по дате

Команда sort сортирует содержимое файла в алфавитном или нумерологическом порядке. Если задать несколько файлов, то команда sort соединит их и, рассортировав, выдаст единым выводом. По умолчанию, объектом сортировки будут строки, однако опции позволяют выбирать объект сортировки: колонки, столбцы и прочие элементы форматирования файла. Разделителем между ними служат пробелы, однако соответствующие опции позволяют задать иные разделители.

Команда sort весьма древняя, она может служить образцом программирования утилит в ранних 70-х годах прошлого века. У команды множество опций, и их разнообразные сочетания, а также способы задания разделителей, хорошо развивают память и воображение.

Программа sort без опций

Я составил список своих должников и записал их в файл debts.txt:

Если мне придет в голову рассортировать должников по алфавиту, то я дам команду:

А могу и в обратном алфавиту порядке:

Параметры sort

Опции -n и -k

Приходится рассматривать эти две опции вместе, так как они позволяют сразу ввести читателя в курс дела, а не рассматривать множество простых примеров.

Опция -n используется всегда, когда нужно сортировать числа, разумеется в порядке возрастания (или убывания, добавив опцию -r).

Опция -k позволяет задавать объект сортировки: все эти столбцы, колонки, и тому подобные элементы форматирования файла.

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

Читайте также:  Вернуть обычный пуск windows

Опция -n сообщает команде, что сортировать придется числа, опция -r , что в обратном порядке, а опция -k задает объект — вторую колонку текста.

У нас есть еще одна колонка с числами месяцев, можно для тренировки рассортировать список по числам разных месяцев, хотя никакого практического смысла это не имеет:

Видите, в пятой колонке числа идут по возрастающей. Древность программы сказывается еще и в том, что можно вводить опции по-разному. Например можно набрать:

с тем же результатом. И даже:

Должен предупредить, что существует два стиля задания объекта сортировки. (Имейте в виду, по-английски эти объекты называются fields, что обычно переводится как поля. Если видите в манах слова: fields или поля, знайте — речь идет о колонках, столбцах, или иных элементах форматирования текста). Но вернемся к стилям задания этих самых «полей».

Новый стиль использует опцию -k и цифры, указывающие порядковый номер нужной колонки с начала строки (начиная с 1).Возьмем файл pay.txt:

И дадим команду:

Сортировка произошла по первому символу второй колонки, что не дало нам никакой пользы. Изменим команду:

Указав пятый символ (считая точки) во второй колонке (-k2.5), мы получили алфавитный список сотрудников.

Теперь рассмотрим файл ivanov.txt:

Рассортируем его строго по второй колонке, не принимая во внимание колонку с инициалами:

Для этого мы применили опцию -k 2,2. Первая двойка означает начало объекта сортировки (колонки текста), а вторая двойка через запятую — конец объекта сортировки. То есть команде запрещено использовать для сортировки символы после последней буквы второй колонки.

Мы видим, что Ивановы идут в том же порядке, что и в исходном файле. А если мы хотим рассортировать Ивановых в алфавитном порядке их инициалов?

Мы приказали использовать для сортировки вторую и третью колонки текста (-k 2,3). Теперь Ивановы отсортированы и по инициалам. Но важнее знать, кто из Ивановых больше должен:

Теперь инициалы не сортируются, так как первичная сортировка проводится строго по второй колонке (-k 2,2), а вторичная сортировка (-k 4n) по 4 колонке, в нумерологическом порядке, и только среди Ивановых (то есть тех, кто не различался по результатам первичной сортировки). Теперь становится понятно, зачем нужна такая сортировка — строго по заданному объекту.

Надеюсь, что новый стиль написания опции -k стал понятен. Новый стиль применяется на всех современных версиях команды sort, включая GNU Coreutils, которыми укомплектованы все новые дистрибутивы Линукс.

Вкратце коснусь старого стиля написания опции -k. Вот пример задания третьего столбца для нумерологической сортировки:

  • Новый стиль: sort -k 3,3n имя_файла
  • Старый стиль: sort +2 -3n имя_файла

Старый стиль работает на новых версиях программы, но рассматривать его в подробностях я не стану, чтобы не запутаться самому и не запутать читателя. Нам хватит путаницы и с новым стилем.

Опция -r

Мы уже познакомились с ней. Она заставляет команду sort сортировать в обратном порядке. (От ‘z’ к ‘a’ и от 1000000 к 0).

Опция -M

Я не могу не остановится на одной удивительной способности команды sort — она может сортировать даже месяцы. Вернемся к файлу debts.txt:

Названия месяцев у нас в 4 колонке, поэтому пишем:

Вуаля! Мне это почему-то кажется чудом. Можно задать ту же команду и по-другому:

Опция М преобразует первые три непробельные символа указанного столбца в заглавные буквы (Скажем, SEP означает SEPtember), а затем сравнивает их и располагает в порядке годового круга.

До сих пор мы рассматривали файлы, в которых разделителем колонок или столбцов был пробел, что и установлено по умолчанию. Чтобы задать другой разделитель, необходимо использовать опцию -t.

Опция -t

Позволяет указать иной разделитель объектов сортировки вместо пробела. Вернемся к файлу pay.txt:

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

Теперь мы задали разделителем точку и указали четвертую колонку.

Давайте рассортируем по алфавиту шеллы, доступные в системе, указав разделителем слэш (-t ‘/’):

В директории /etc масса файлов, в которых встречаются различные разделители. Часто это двоеточие:

Эта команда рассортирует файл /etc/passwd в порядке возрастания идентификационных номеров пользователей. Проделайте этот пример самостоятельно, у него длинный вывод, боюсь мой редактор будет не в восторге.

Надеюсь, с разделителями все ясно, правила их задания очень напоминают команду cut.

Опция -c

Эта опция проверяет порядок сортировки, сама ничего не сортируя. Создадим файл 123.txt:

Вывод «неправильный порядок: 1» сообщает нам номер строки с первой ошибкой.

Опция -u

Скрывает одинаковые объекты. Если в процессе сортировки выявилось несколько одинаковых объектов, то будет выведен только первый из них, остальные проигнорированы:

Остался только один Иванов из трех.

Если бы мы задали команду чуть по-другому:

то все Ивановы остались бы на своих местах. Ответьте: почему? (Ответ в приложении [1]).

Опция -b

Игнорирует пробелы в начале строк, и сортирует так, словно пробелов нет. Возьмем файл run.txt

Применим команду sort без опций:

Фактически произошла сортировка по количеству пробелов, так как пробел предшествует буквам в порядке сортировки. Введем команду:

Читайте также:  Windows 10 браузер edge java

Теперь строки отсортированы в алфавитном порядке, невзирая на пробелы.

Немного усложним файл run.txt

И попробуем выстроить животных по алфавиту:

Ничего не выходит — сортируется количество пробелов. Но стоит добавить опцию -b

как все становится на свои места.

Опция -d

Признает только буквы, цифры и пробелы и сортирует как в словаре.

Опция -i

Весьма похожа на предыдущую опцию -d, но не такая «строгая». Она признает только печатные символы, игнорируя все специальные.

Опция -f

При обычной сортировке, заглавные буквы идут прежде строчных:

А с опцией -f все равны:

Опция -g

Позволяет сортировать числа, записанные в общей математической форме. Возьмем файл notation.txt:

и попробуем рассортировать его обычной опцией -n:

и потерпим неудачу. Тогда применим опцию -g:

Теперь числа выстроились по ранжиру. Нужно сказать, что применять опцию -g следует в крайних случаях, когда нельзя обойтись опцией -n. Дело в том, что опция -g медленнее, и на больших файлах это становится заметным. Кроме того, в Интернете появляются сообщения, что в некоторых версиях GNU Coreutils sort замечены сбои в работе опции -g на больших файлах (Больше 25Мб).

Опция -T

Позволяет указать директорию для временных файлов, иную, чем положено по умолчанию (/tmp или $TMPDIR).

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

Опция -S

Также пригодится для сортировки больших файлов. Она создаст в основной памяти буфер указанного размера.

Кстати, коли речь зашла о работе с большими файлами, то полезно бывает переместить эти процессы на задний план, чтобы можно было работать, не дожидаясь завершения процесса:

Опция -s

Эта опция отменяет пересортировку. Что это такое? — Допустим, мы сортировали некий файл по определенным, нужным нам объектам сортировки (полям, столбцам, колонкам, символам внутри колонок и так далее), применяли вторичную сортировку (как в примере sort -k 2,2 -k 4n ivanov.txt), но все объекты, выбранные нами, оказались одинаковыми (равными). В этом случае, по умолчанию, команда sort проводит пересортировку, считая объектом сортировки всю строку в целом (как в случае сортировки без опций). Если мы хотим сохранить первоначальный порядок строк файла, и не проводить финальную пересортировку, то мы применяем опцию -s.

Опция -z

Эта опция рассматривает исходный файл как набор строк, разделенных не знаком переноса строки, а нулевым байтом. Для чего это может понадобиться, я не знаю. Единственное, что мне удалось найти, это туманные указания, что эта опция может оказаться полезной в составе программных каналов (pipes) с такими командами как ‘perl -0’, ‘find -print0’, и ‘xargs -0’ для сортировки произвольных файловых имен. Я пока не разбирался с перечисленными программами и не могу ничего сказать по этому поводу. Я также пробовал подставлять опцию -z в многочисленные примеры из этой статьи, но никакой сортировки после добавления этой опции не происходило.

Опция -o

Видимо пережиток прошлого, когда не было перенаправления вывода. С помощью этой опции можно задать файл, куда будет помещен вывод команды вместо стандартного вывода на экран дисплея.

Послесловие

Оставшиеся опции варьируют в различных мануалах и руководствах, они достаточно понятны интуитивно, и не требуют специального рассмотрения. Если какой-то из опций нет в вашем мане, не беда, скорее всего опция поддерживается вашей версией программы. Попробуйте, чем вы рискуете? Но попадаются опции, не поддерживаемые GNU Coreutils sort, как например опции -R и —random-source=file, позволяющие «рассортировать» строки и прочие объекты в случайном порядке.

Другое дело сочетания различных опций друг с другом. Если вы соорудили заковыристое заклинание из множества разных опций, а оно не работает, попробуйте убрать ту или другую опцию, может быть поможет. А лучше идти от простого к сложному, постепенно усложняя команду, пока не достигнете нужного результата. Хорошо помогает набрать вашу команду в поисковой строке Гугла, вдруг повезет. Кстати, только этим способом я смог разобраться с некоторыми опциями, о которых пишу в этой статье.

Команда sort и кириллица

Команда sort работает с нашими буквами неадекватно.

Резюме команды sort

Чрезвычайно полезная и «мощная» команда. С ее помощью не проблема выявить в огромной директории файлы, которые вы вчера потеряли (по дате модификации), или собрать «в кучу» все линки, чтобы их проверить, и так далее. А в качестве фильтра в программных каналах (pipes), эта команда просто незаменима и позволяет творить чудеса.

Приложение

[1] Ответ на задачу про Ивановых.

В первом случае мы задали сортировку строго по второй колонке (-uk 2,2), поэтому программа видела всех Ивановых одинаковыми, и включила опцию -u.

Во втором случае мы задали сортировку, не указав конец объекта сортировки (-uk2), и программа сортировала Ивановых по следующим колонкам (могла бы до конца строки). В этом случае одинаковых объектов выявлено не было, и опция -u не включилась.

Источник

Оцените статью