如何找到路径最长的目录?

如何找到路径最长的目录?

ls ~ -R如何使用command在当前目录中找到最长路径(包含最多子目录)的目录

答案1

GNU可以使用其谓词的格式说明符find输出找到的名称的深度:%d-printf

find . -type d -printf '%d\t%p\n'

这将输出当前目录中或当前目录下找到的目录的深度,以及相对于.搜索路径的目录路径名。深度和路径名由单个制表符分隔。

\0假设路径名可能包含换行符,为了正确地将这些信息传递给其他工具进行排序等。用 来代替\n格式字符串的末尾会更安全。然后,您可以使用 GNU 对生成的以 null 结尾的列表进行排序,并使用 GNU和 GNUsort选出深度最大的路径名。如果您将非标准选项传递给这些工具的 GNU 变体,则它们都能够处理以 null 结尾的记录,而标准工具都可以处理文本行。tailcut-z

find . -type d -printf '%d\t%p\0' | sort -z -n | tail -z -n 1 | cut -z -f 2-

Finalcut删除了从字符串开头开始的数字深度。

这将在标准输出上为您提供一个以 null 结尾的字符串,其中包含当前目录下最长(最深)的目录路径名。如果有多个相同深度的路径名,这将为您提供按字典顺序对最后一个进行排序的路径名。

答案2

以下内容将假设您的目录名称不包含换行符。如果是这种情况,则以下操作将起作用:

find . -type d | awk -F'/' 'NF>max{longest=$0;max=NF} END{if (max) print longest}'

这将用于find搜索当前目录的所有子目录。它将输出提供给awk,并将字段分隔符设置为/,以标识具有最大数量字段(= 路径组件)的输入字符串。该输入字符串(如果有)会在最后打印。

答案3

当然,解析 的输出ls通常是不受欢迎的,但如果你真的想用 来做到这ls -R一点,比如

ls -R ~ | grep '/' | while read var ; do
        res="${var//[^/]}"
        echo "${#res} $var"
done | sort -n | sed 's/^[^ ]* //' | tail -1

应该管用。

注意:这远非万无一失。如果您有复杂的目录名称(例如/名称中的换行符或 a ),此脚本将严重失败。

相关内容