查找没有子目录和特定排序的非空目录

查找没有子目录和特定排序的非空目录

我在学习方面“家庭作业”有问题。

我必须列出 和 中所有非空目录/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-node 对该列表进行排序?

感谢帮助。

答案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

答案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

相关内容