Как мне получить только имя файла из lsof?

Я хочу использовать lsof для создания списка открытых файлов в папке. Я использую macOS, но понимаю, что это характерно для * nix.

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

$ lsof -Fn dir1 | cut -c2-

Я ожидаю

dir1/file1.txt

я собираюсь

32783
34
dir1/file1.txt
32785
3
dir1/.DS_Store

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

RavinderSingh13 08.04.2019 13:32

может быть lsof |grep -oP '/.*' должно работать.

P.... 08.04.2019 16:32
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
803
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Не могли бы вы попробовать следующее (поскольку образцы не были опубликованы, поэтому тестировались только в моем тестовом блоке).

lsof  | awk 'match($0,//([^ ])*|/([^$])*/){print substr($0,RSTART,RLENGTH)}'


Обновлено: Поскольку OP не обязательно должен иметь файлы с DOT в своих именах (я думаю, в основном скрытые), то можно попробовать следовать.

lsof  | 
awk '
FNR>1 && match($0,//.*/){
   val=substr($0,RSTART,RLENGTH)
   if (val !~ //\./){
     print val
   }
   val = ""
}'

Спасибо, это помогает. Я думал, что это можно сделать с помощью параметров lsof. Я поиграю, чтобы понять это регулярное выражение. Есть ли способ исключить точечные файлы?

RedZebra 08.04.2019 13:43

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

RavinderSingh13 08.04.2019 13:44

Спасибо. Выведите такие строки. Обычно .DS_Store. /testing?Dir2/.DS_Store

RedZebra 08.04.2019 13:48

@RedZebra, конечно, не могли бы вы попробовать мою команду EDIT и сообщить мне, так как у меня нет скрытых файлов lsof, поэтому я не могу это проверить, дайте мне знать?

RavinderSingh13 08.04.2019 13:51

Это прекрасно работает в сценарии оболочки. Когда я пытаюсь поместить это в команду perl system(), возникают всевозможные проблемы. Какие-нибудь советы?

RedZebra 09.04.2019 18:40

Итак, я назвал bash-скрипт из perl дочерним процессом. Все хорошо.

RedZebra 10.04.2019 00:50

вы можете использовать эту команду:

lsof your_dir | awk '{print $9}'

Обновлять:

lsof your_dir | awk '{for(i=9;i<=NF;++i)print $i}'

это напечатает столбец 9 до конца.

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

RedZebra 08.04.2019 13:46

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