Как извлечь длинное поле для листинга?

Я хочу извлечь день доступа файла в сценарий оболочки. Я попытался написать следующий скрипт, но он не работает. Когда я возвращаюсь к выходным дням , вывод «штат».

file=$1 accessday=$(ls -lu $file | cut -d ' ' -f 6) 

4 Solutions collect form web for “Как извлечь длинное поле для листинга?”

Не разбирайте ls .

Это работа для stat .

Чтобы получить последнее время доступа в человекообразном формате:

 stat -c '%x' file.txt 

в секундах с эпохи:

 stat -c '%X' file.txt 

Если вы посмотрите на типичный выход ls -lu ,

 -rw-r--r-- 1 someuser somegroup 74 Mar 29 05:21 filename 

вы заметите, что перед именем группы предшествует всего пять пробелов. Таким образом, ваша спецификация поля 6 в команде cut возвращает группу («штат» в вашем случае).

Кроме того, день доступа будет полем 7, а не 6 в вашей нотации.

Одним из решений было бы использовать awk , поскольку он обрабатывает множественные вхождения разделителя полей так, как вы ожидали по умолчанию:

 accessday=$(ls -lu $file | awk '{print $7}') 

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

stat -c '%x' FILENAME | cut -c 9,10

Анализ вывода ls затруднен и не всегда возможен . Если вы хотите извлечь временную метку, это иногда является необходимым резервом (это единственный переносимый способ сделать это: не все системы имеют команду stat ), но вы получаете удобочитаемую по времени метку времени, которую трудно преобразовать в машину, читаемый . По крайней мере, устраните трудные части: передайте опции -o и -g , чтобы опустить поля пользователя и группы (они могут содержать пробелы на некоторых системах, что делает невозможным разграничение вывода ls ). Затем метка времени занимает поля 4-6 (нумерация от 1).

Не забывайте двойные кавычки вокруг переменных разложений .

 access_time=$(ls -dlogu -- "$file" | awk '1 {print $4, $5, $6}') 

Если вы хотите день месяца, вам нужно различать два формата вывода, для временных меток за последние 6 месяцев или нет. Установите языковой стандарт на C, чтобы получить надежный формат вывода. В этом формате день месяца всегда является вторым временным полем.

 access_day=$(ls -dlogu -- "$file" | awk '1 {print $5}') 
  • Нужно преобразовать столбец timestamp unix epoch в каждую строку с помощью sed или awk
  • Можете ли вы прочитать обновленное mtime, но при чтении содержимого они еще не обновлены?
  • Изменить временную метку файла и время показа вместо года с помощью ls
  • Почему прикосновение может меняться только все время, или ничего, если не владелец
  • Установите дату создания файла в дату его изменения на OSX
  • Удалите все файлы в папке, кроме последней (последней) 20
  • В Ubuntu - / var / log / messages отметки времени на 4 минуты вперед
  • Какой может быть вариант изменения измененного времени файла в будущем?
  • Параметр -link-dest от rsync не связан из-за времени файла
  • команда / opt / bin / date -date '-15 минут 2016-04-27T14: 14: 47' результат за много часов до указанного времени
  • Как найти последние n новых файлов для каждой из нескольких каталогов
  • Interesting Posts

    Мониторинг mysql с munin – хуже производительность MySQL?

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

    Как передать запрос схемы HTTPS прокси без использования туннеля CONNECT в FreeBSD?

    Как заблокировать выбор в Konsole?

    Как передать аргумент из сценария bash в 'x-terminal-emulator -e bash -c'?

    Преобразовать формат вывода ls -l в формат chmod

    Как настроить сервер OpenVPN на pfsense

    Сопоставить графическую активную область планшета для мониторинга подрайона в настройке с двумя мониторами

    Существуют ли сетевые подключения, которые не используют карту WiFii или порт Ethernet?

    Как узнать, что включить в ядре?

    Функция не выполняется в скрипте

    вручную перенаправлять X-выход через ssh

    Убейте обе команды, которые запускаются одновременно в bash

    Копирование порядка в алфавит в сценарий оболочки

    Какие числовые коды клавиш мне нужно отправить для магической функции sysrq в сеансе VNC?

    Linux и Unix - лучшая ОС в мире.