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

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

Я работаю над LRU-скриптом, но после 20 часов работы над ним у меня возникла проблема с рекурсивным режимом, которую я не могу исправить.

Мне просто нужна команда, которая покажет мне файлы, отсортированные по времени доступа (--time=atime); я также хочу управлять глубиной, но если я не могу этого сделать, то это тоже нормально.

  • Основной каталог:
    • Файл 1
    • Каталог 1:
      • Файл 1
      • Файл2
      • Подкаталог 1:
        • файл1
        • файл 2
    • Каталог 2:
      • Файл 1
      • Файл 2
      • Подкаталог 2:
        • файл 1
        • файл 2
        • подкаталог 3:
          • файл 1

Я хочу исключить каталог, просто отсортировав файлы по времени доступа

нравиться

/Главный каталог/Каталог 1/файл 1

/Главный каталог/Файл 1

/Главный каталог/Каталог 1/Подкаталог 1/файл 2

/Главный каталог/Каталог 2/Подкаталог 2/подкаталог 3/файл 1

и т. д..

решение1

Существует шесть наиболее часто используемых инструментов для решения подобных проблем:

  • find, для поиска файлов или каталогов, соответствующих определенным записям.

    Параметры -mindepthи -maxdepthуправляют глубиной расположения команды в дереве файловой системы (относительно указанных имен, которые всегда находятся на глубине 0).

    Эта -typeопция полезна для ограничения рассмотрения файлов, каталогов, символических ссылок или устройств.

    Эта -printfопция чрезвычайно полезна, так как она заставляет команду выводить информацию о совпадающих именах (элементах каталога) в нужном формате. Мне особенно нравится %TY%Tm%Td %TT %p\n, которая выводит дату и время последнего изменения, а также полный путь и имя каждого совпадения в каждой строке, используя format YYYYMMDD HH:MM:SS.sss PATH. Видите ли, этот формат сортирует правильно. Для последнего доступа используйте %AY%Am%Ad %AT %p\n, но обратите внимание, что временные метки доступа вообще не записываются, если noatimeиспользуется опция монтирования, или, если relatimeиспользуется опция монтирования, временные метки доступа изменяются только для первого доступа после изменения; таким образом, проверка на наименее давно используемые ненадежна. (Однако список наименее недавно измененных довольно надежен; пользователи могут изменять временные метки вручную, но в противном случае они поддерживаются автоматически.)

  • sortдля сортировки вывода.

    Параметры -d, -g, -h, -Mи -nопределяют, как сравниваются элементы, а -Rпараметр делает порядок случайным.

    Эту -rопцию можно использовать для изменения порядка сортировки на обратный (используется в дополнение к одной из вышеперечисленных опций).

    Эта -tопция переопределяет способ определения полей (столбцов); по умолчанию столбцы разделяются пробелами (пробелами и табуляциями).

    Эту -kопцию можно использовать для определения того, какая часть каждой строки считается ключом сортировки; по умолчанию рассматривается вся строка.

  • uniqчасто используется после сортировки для объединения нескольких последовательных элементов в один, чтобы выводить только уникальные строки.

  • cut— это самый простой способ выбрать только определенные столбцы из каждой строки вывода.

    Параметр -fвыбирает поля для печати. ​​(По умолчанию печатаются строки, содержащие не более одного поля (без разделителей); параметр -sподавляет печать таких строк.)

    Эту -dопцию можно использовать для переопределения определения поля; по умолчанию отдельные поля очищаются.

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

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

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

решение2

Самый простой способ — использоватьзш. Егоквалификаторы globможет сопоставлять и сортировать файлы по их типу, временным меткам и другим свойствам.

print -lr -- *(.Doa)
print -lr -- **/*(.Doa)

Первая команда выводит имена обычных файлов ( .) в текущем каталоге, включая файлы с точкой ( D), отсортированные по времени доступа ( oa). Вторая команда рекурсивно выводит список файлов в текущем каталоге и его подкаталогах.

Связанный контент