Я хочу использовать lsof для создания списка открытых файлов в папке. Я использую macOS, но понимаю, что это характерно для * nix.
В мужчина lsof кажется, что опция -Fn ближе всего к тому, что я хочу, но я не могу продвинуться дальше этого. Я собираюсь вырезать, чтобы добраться до имени файла. Итак, это команда, которую я использую:
$ lsof -Fn dir1 | cut -c2-
Я ожидаю
dir1/file1.txt
я собираюсь
32783
34
dir1/file1.txt
32785
3
dir1/.DS_Store
может быть lsof |grep -oP '/.*'
должно работать.
Не могли бы вы попробовать следующее (поскольку образцы не были опубликованы, поэтому тестировались только в моем тестовом блоке).
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, конечно, я тоже добавлю некоторые пояснения в свой пост через несколько минут. Относительно файлов DOT, если бы вы могли опубликовать пример, я мог бы настроить код в соответствии с этим, дайте мне знать пример.
Спасибо. Выведите такие строки. Обычно .DS_Store. /testing?Dir2/.DS_Store
@RedZebra, конечно, не могли бы вы попробовать мою команду EDIT и сообщить мне, так как у меня нет скрытых файлов lsof
, поэтому я не могу это проверить, дайте мне знать?
Это прекрасно работает в сценарии оболочки. Когда я пытаюсь поместить это в команду perl system()
, возникают всевозможные проблемы. Какие-нибудь советы?
Итак, я назвал bash-скрипт из perl дочерним процессом. Все хорошо.
вы можете использовать эту команду:
lsof your_dir | awk '{print $9}'
Обновлять:
lsof your_dir | awk '{for(i=9;i<=NF;++i)print $i}'
это напечатает столбец 9 до конца.
Спасибо. Это выглядит хорошо и должно хорошо работать. Проблема в том, что в некоторых именах файлов есть пробелы, поэтому он выбирает только первое слово имени.
Хорошо, что вы продемонстрировали свои усилия в своем сообщении, всегда рекомендуется публиковать образец ввода и ожидаемый результат в своем сообщении, чтобы получить четкое представление о вашем вопросе.