Как мне получить только имя файла от lsof? - PullRequest
1 голос
/ 08 апреля 2019

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

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

$ lsof -Fn dir1 | cut -c2-

Я ожидаю

dir1/file1.txt

Я получаю

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

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

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

lsof your_dir | awk '{print $9}'

Обновление:

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

, при этом столбец 9 будет напечатан до конца.

0 голосов
/ 08 апреля 2019

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

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=""
}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...