我需要确定给定目录中是否有任何目录名称> 31 个字符(即在该根目录下查看)。
我知道我可以使用类似的东西find /path/to/root/dir -type d >> dirnames.txt
这会给我一个完整路径的文本文件。
我需要的是获取每个目录名称中的实际字符数。不确定使用 sed 或 awk 解析上述结果是否有意义。寻找有关如何完成此任务的想法/想法/建议/提示。谢谢!
我需要确定给定目录中是否有任何目录名称> 31 个字符(即在该根目录下查看)。
我知道我可以使用类似的东西find /path/to/root/dir -type d >> dirnames.txt
这会给我一个完整路径的文本文件。
我需要的是获取每个目录名称中的实际字符数。不确定使用 sed 或 awk 解析上述结果是否有意义。寻找有关如何完成此任务的想法/想法/建议/提示。谢谢!
这个简短的脚本一次性完成,即找到所有目录名称,然后输出长度大于 31 个字符的任何目录名称(以及它们的字符长度):
for d in `find /path/to/root/dir -type d -exec basename {} \;` ; do
len=$(echo $d | wc -c)
if [ $len -gt 31 ] ; then
echo "$d = $len characters"
fi
done
尝试这个
find . -type d -exec bash -c '[ $(wc -c <<<"${1##*/}") -gt 32 ] && echo "${1}"' -- {} \; 2>/dev/null
我认为是次要的一个错误是,它每次都会将目录名称长度多计 1。
如果你想要的是整个路径而不是最后一个路径组件,那么使用这个:
find . -type d | sed -e '/.\{32,\}/!d'
此版本也有一个错误,但仅限于文件名嵌入换行符时。
两个命令的输出都是符合条件的文件名列表。从那里计算每个人的长度是微不足道的。
使用您的find
cmd 创建的 dirnames.txt 文件,您可以按路径名的长度对数据进行排序,即
awk '{print length($0) "\t" $0}' dirnames.txt | sort +0nr -1 > dirNamesWithSize.txt
这将在文件顶部显示最长的路径名(基于长度的值)。
我希望这有帮助。