![查找没有子目录和特定排序的非空目录](https://linux22.com/image/1356896/%E6%9F%A5%E6%89%BE%E6%B2%A1%E6%9C%89%E5%AD%90%E7%9B%AE%E5%BD%95%E5%92%8C%E7%89%B9%E5%AE%9A%E6%8E%92%E5%BA%8F%E7%9A%84%E9%9D%9E%E7%A9%BA%E7%9B%AE%E5%BD%95.png)
我在学习方面“家庭作业”有问题。
我必须列出 和 中所有非空目录/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-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