Поиск не пустых каталогов без подкаталогов и специальной сортировки
У меня проблема с моей "домашней работой" на учебе.
Я должен перечислить все не пустые каталоги из /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-узла.
Итак, вот вопросы:
- Как я могу исключить каталоги с подкаталогами из этого списка?
- Как я могу отсортировать этот список по i-узлу, который находится во втором столбце?
Спасибо за помощь.
2 ответа
Итак, я был прав. Все, что мне нужно было сделать, это добавить -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
Хорошо, я думаю, что нашел решение вашей проблемы на основе 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