2

У меня проблема с моей "домашней работой" на учебе.

Я должен перечислить все не пустые каталоги из /var и /usr , которые не имеют подкаталогов и их владелец не является пользователем root. Кроме того, для каждого каталога я должен показать глубину в дереве каталогов, номер i-узла, размер, разрешения в удобочитаемом и восьмеричном форматах и абсолютный путь к этому каталогу, и отсортировать его по убыванию по номеру i-узла.

Вот что я сейчас сделал:

find /{us,va}r -type d \! -user root \! -empty -printf "%d %i %k %M %m %u %h/%f\n" | sort -rn

Теперь мне просто нужно удалить каталоги с подкаталогами и отсортировать их по номеру i-узла.

Итак, вот вопросы:

  1. Как я могу исключить каталоги с подкаталогами из этого списка?
  2. Как я могу отсортировать этот список по i-узлу, который находится во втором столбце?

Спасибо за помощь.

2 ответа2

1

Итак, я был прав. Все, что мне нужно было сделать, это добавить аргумент -links 2 для find , чтобы он выводил каталоги только с 2 "жесткими ссылками" (которые не являются жесткими ссылками - это счетчик подкаталогов, и в каждом каталоге есть как минимум 2 подкаталога - '.' И '..') и -k 2 для sort , поэтому она будет отсортирована по второму столбцу.

Вся команда выглядит так:

find /{us,va}r -links 2 -type d \! -user root \! -empty -printf "%d %i %k %M %m %u %h/%f\n" | sort -rnk 2
0

Хорошо, я думаю, что нашел решение вашей проблемы на основе Python.

Сохраните этот фрагмент как egxpy и chmod +x x.py

#!/usr/bin/python
import sys
x=[]
for line in sys.stdin:
  x.append(line.rstrip())

y=x[:]
for i in x:
  mark=x.index(i)
  for j in y:
    if i.split()[6]  in j.split()[6]  and i != j:
      if i in y: y.remove(i)

for j in y:
  print j

Затем пропустите через него команду find (без битов ссылок) и выполните сортировку

find /{us,va}r -type d \! -user root \! -empty -printf "%d %i %k %M %m %u %h/%f\n" | x.py | sort -k2,2n

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .